2010-06-11 63 views
0

我想画一个基于视图的应用程序的屏幕上的UIColor,我试图这样做使用HSB。在这种情况下,使用HSB是绝对必要的。我可以用0.0f到0.75f的任何S值创建一个UIColor对象,但过去数值变化对显示的实际饱和度没有影响。我需要它是1.0f,但它仍然使用0.75f。关于它为什么这样做的任何想法,以及我如何才能使其工作?iPad的UIColor饱和问题

+0

您是否测量过RGB值不正确,还是仅仅依赖它的外观? – 2010-06-12 00:14:04

+0

我测量了这些值,它们确实是不正确的。 – 2010-06-12 03:47:46

+0

你使用的色调和亮度是多少? – kennytm 2010-06-12 05:59:27

回答

0

经过一番实验,我发现我的问题是。

我正在使用for循环在视图中绘制单像素线,每个线的色调值都大于前一个。我这样做是为了创建一个用于拾色器的色谱。

我的问题出现是因为我使用CGContext路径而不是rects来执行绘图。默认情况下,路径使用像素“跨越”创建的路径。因为我将宽度设置为1,所以CoreGraphics被迫在像素之间平均,产生了去饱和效果。将宽度设置为2可正确设置饱和度,但谱图的梯度不再平滑。

我对此问题的解决方法是使用rects而不是路径。他们没有混合像素,饱和度问题是固定的。

+0

HSB色域仅比RGB色域大。因此,色域外剪辑。 – 2011-05-07 20:57:06

0

由于它的工作原理,+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha实际上并未在内部使用HSBA值;它仅仅是设备RGB色彩空间的包装。

我认为在极端情况下,恒定的H/B/A + a .75-1 S产生的颜色会略微有点不同,但它会变得难以察觉,尽管颜色分量被数字跟踪为非常精确彩车。随着饱和度下降,“可用”颜色的数量减少(因为显示屏只能显示多种颜色,降低饱和度会压缩可用颜色),碰撞的机会就会增加。

鉴于您的场景使用H0-1,B1,A1颜色,这几乎使我的假设无效,所以我很好奇并做了一个测试项目;颜色然而工作正确。我使用的是iOS 4 SDK GM,所以如果我们知道您正在使用哪个SDK,它可能会有所帮助。

+0

我也使用GM 4.0 SDK。 – 2010-06-14 03:31:13

+0

这变得更加有趣。我们可以看看你的代码的那部分? – 2010-06-14 03:52:08

+0

对不起,我现在想通了。看到我的答案。 – 2010-06-14 04:46:44