gpt4 book ai didi

ios - 启用抗锯齿后,使用不同颜色在 drawRect 中绘制重叠形状会导致边缘出血

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:04 27 4
gpt4 key购买 nike

我在绘制具有重叠的不同颜色的相同形状时遇到问题。启用抗锯齿后,生成的透明像素会渗出并导致伪像,如 this image 中所示。 .她的顺序是画一个红色圆圈,画一个蓝色三角形,然后画一个红色三角形。

这个问题可以通过禁用抗锯齿来解决,但结果是丑陋的锯齿状边缘。

例如,是否有解决方案,我可以在其中主动对图形上下文进行反锯齿处理或渲染到图像并在该图像上进行抗锯齿处理。或者任何其他可以帮助我绘制具有清晰边缘的重叠形状的东西。

这是重现问题的代码

-(void)drawRect:(CGRect)rect
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextClearRect(currentContext, rect);
CGContextSetAllowsAntialiasing(currentContext, YES);

//// Color Declarations
UIColor* color = [UIColor redColor];
UIColor* color2= [UIColor blueColor];

//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: rect];
[color setFill];
[ovalPath fill];

//// triangle Drawing
UIBezierPath* trianglePath = [UIBezierPath bezierPath];
[trianglePath moveToPoint: CGPointMake(0, 0)];
[trianglePath addLineToPoint: CGPointMake(rect.size.width, rect.size.height)];
[trianglePath addLineToPoint: CGPointMake(0, rect.size.height)];
[trianglePath addLineToPoint: CGPointMake(0, 0)];
[trianglePath closePath];
[color2 setFill];
[trianglePath fill];

[color setFill];
[trianglePath fill];
}

最佳答案

问题在于,使用 drawRect 时,您基本上是在图像上绘制,并且每个绘制方法都在前一个绘制方法之上呈现。没有剔除。

要真正解决此问题,您可能希望使用 OpenGL,其中只有一个渲染 channel ,因此不会渲染隐藏的对象。

关于ios - 启用抗锯齿后,使用不同颜色在 drawRect 中绘制重叠形状会导致边缘出血,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15703617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com