绘制后如何使雕刻线的边缘具有纯色

时间:2019-10-30 02:40:47

标签: ios core-graphics

众所周知,绘制一条雕刻线后,有些像素具有半透明的颜色,如下所示。

enter image description here

我不知道该怎么称呼这种现象,可能是由“混合模式”或“预乘Alpha”引起的,我想知道如何忽略这些非固态像素,谢谢。 我的绘画代码:

guard let ctx = UIGraphicsGetCurrentContext() else { return }
ctx.addPath(path)
ctx.setLineCap(.round)
ctx.setLineWidth(lineWidth)
ctx.setStrokeColor(lineColor.cgColor)
ctx.setBlendMode(.normal)
ctx.setAlpha(lineAlpha)
ctx.strokePath()

我有一个解决方案,即从ctx生成图像,然后将半透明像素更改为实心像素,然后将图像绘制回ctx。这是有道理的,但是它存在性能问题,那么在画线时我们有办法解决它吗?谢谢。

1 个答案:

答案 0 :(得分:1)

这称为“抗锯齿”。在进行绘制之前,请先使用CGContext.setShouldAntialias(_:)将其关闭,如下所示:

protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
        txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
        setDetails();
    }
}
protected void setDetails()
{
    lblCaption.Text = string.Format("{0}", DateTime.Parse(txtDate.Text).ToString("MMM/yyyy"));        
}
protected void DateChanged(object sender, EventArgs e)
{
    //setDetails();
}
public string[] GetData()
{
    string[] data = new string[5];
    data[0] = "title: 'All Day Event 2',start: new Date(y, m, 1)";
    data[1] = @"title: 'Meeting all day',start: new Date(y, m, 2),allDay: true,url: 'http://www.google.com/'";
    data[2] = @"title: 'Meeting all day - 1',start: new Date(y, m, d - 5),allDay: true,url: 'http://www.google.com/'";
    data[3] = @"title: 'Birthday Party',start: new Date(y, m, d - 3, 12, 0),end: new Date(y, m, d - 3, 16, 0),allDay: false";
    data[4] = @"title: 'Click for Google 112233',start: new Date(y, m, 28),end: new Date(y, m, 9),url: 'http://google.com/' ";
    return data;
}