gpt4 book ai didi

objective-c - 绘制矩形时如何避免颜色混合?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:28 25 4
gpt4 key购买 nike

在 iOS 的 UIView 中绘制矩形时,我一直遇到同样的问题:矩形边距将它们的颜色与背景混合。我尝试了几种具有相同结果的矩形绘制方法——使用贝塞尔曲线路径、逐行绘制、绘制边距并填充矩形的内部。

View 的框架本身总是正确绘制的。我什至考虑过在需要矩形时使用 View ,但这似乎不是正确的处理方式,因为我需要绘制很多矩形。

这是我的问题的一个例子。为了进行比较,我绘制了一个具有相同尺寸的矩形绿色 View :

CGRect horizontalBar = CGRectMake(2, 2, 10, 6);

UIView* horizontalBarSubView = [[UIView alloc] initWithFrame:horizontalBar];
horizontalBarSubView.backgroundColor = [UIColor greenColor];
[self addSubview:horizontalBarSubView];
[horizontalBarSubView release];

对于矩形本身:

CGRect horizontalBar = CGRectMake(2, 20, 10, 6);

UIBezierPath* horizontalBarPath = [UIBezierPath bezierPathWithRect:horizontalBar];
[[UIColor greenColor] set];
[horizontalBarPath fill];

这会产生以下结果(10 倍缩放):

10x zoom rectangle test

是什么导致颜色混合?

我怎样才能避免这种情况?

最佳答案

@Almo 是正确的,你的问题是抗锯齿,但你确定这是实际的代码和值吗?这不应该消除锯齿,我的测试表明它没有。为了得到你的结果,我必须改变你的路径:

CGRect horizontalBar = CGRectMake(2.5, 20.5, 10, 6);

在小数像素上填充路径会给您带来您所看到的效果。此外,在具有奇数宽度的整数像素上抚摸路径将以这种方式消除锯齿。 (全部在非 Retina 显示屏上;Retina 略有不同。)

我通常不建议像@Almo 建议的那样关闭抗锯齿功能。相反,您只需要确保您的路径绘制或填充整个像素。

这在 iOS 5 Programming Pushing the Limits 的第 6 章中有更详细的介绍。 , 第 114 页。

关于objective-c - 绘制矩形时如何避免颜色混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9078533/

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