我想使用CGContextClip()做了一些拉伸,但是我遇到了一些奇怪的抗锯齿问题。问题似乎是,填充与正在替换的颜色混合在一起,而不是周围的像素。请参阅图像以获得对问题的更好描述!问题的核芯显卡:CGContextClip()边缘不需要怪异抗锯齿
实施例:
(注意,蓝色边缘被正确抗锯齿)
怪异抗锯齿边缘:
(边缘应该是与白色混合,不是蓝色)
代码:
-(void) drawRect:(CGRect)rect {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSaveGState(c);
{
CGContextBeginPath(c);
CGContextAddEllipseInRect(c, CGRectMake(25, 25, 200, 200));
CGContextClosePath(c);
CGContextClip(c);
CGContextSetFillColorWithColor(c, [UIColor blueColor].CGColor);
CGContextFillRect(c, rect);
CGContextSetFillColorWithColor(c, [UIColor redColor].CGColor);
CGContextFillRect(c, CGRectMake(0, 0, 250, 125));
}
CGContextRestoreGState(c);
}
如何防止这种怪异的抗锯齿任何想法?我无法禁用它,因为圆形边缘仍然需要抗锯齿!
只是要清楚,这仅仅是一个例子。我试图在一个更加复杂的形状上解决这个问题,在这种情况下,仅仅填充一半剪辑的解决方案是不可能的!
尝试用蓝色填充矩形的一半。红色下面是蓝色,所以CG所做的是正确的...... – QED 2014-11-14 21:22:29
这可能会解决这个问题,但这不是我可以应用于其他任何方法的解决方案!随着更复杂的形状,这是不可能的。对不起,我应该在OP中明确指出,我正在尝试解决这个问题,但我只是为了简单起见而用这个例子来演示它。我将编辑OP。 – Hamish 2014-11-14 21:25:19
另外,这绝对不是正确的行为!如果红色填充没有完全覆盖蓝色背景(即,如果围绕该圆圈有1px的蓝色边缘),但它确实有意义。如果关闭抗锯齿功能,红色将占据整个圆的上半部分 – Hamish 2014-11-14 21:29:06