我想使用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