CGColor - CGColorGetComponents 似乎无法正常工作?

Posted

技术标签:

【中文标题】CGColor - CGColorGetComponents 似乎无法正常工作?【英文标题】:CGColor - CGColorGetComponents doesn't seem to work properly? 【发布时间】:2011-07-18 21:06:07 【问题描述】:

我正在尝试从 CGColor 中获取 rgb 值 我使用以下代码。问题是红色、绿色和蓝色的所有返回值始终以浮点数形式返回,并且它们始终介于 0 和 1 之间,例如:rgb(0.000000, 0.847059, 0.945098)

如何将这些值转换为真正的 rgb 值?

int numComponents = CGColorGetNumberOfComponents(color);

if (numComponents == 4)

        const CGFloat *components = CGColorGetComponents(color);
    CGFloat red = components[0];
    CGFloat green = components[1];
    CGFloat blue = components[2];
    CGFloat alpha = components[3];

【问题讨论】:

那些真正的RGB值。你到底在期待什么? 【参考方案1】:

它返回以百分比表示的正确 rgb 值。因此,如果您的红色 = .8,则为 255 的 80%,即 204

所以您的代码可能如下所示:

int numComponents = CGColorGetNumberOfComponents(color);

if (numComponents == 4)

    const CGFloat *components = CGColorGetComponents(color);
    NSInteger red = (NSInteger) components[0] * 255;
    NSInteger green = (NSInteger) components[1] * 255;
    NSInteger blue = (NSInteger) components[2] * 255;
    CGFloat alpha = components[3];

【讨论】:

感谢您解决了问题 我确实认为在乘法之前将值转换为整数是不正确的。那时仅有 2 个可能的值是 0 和 255。 oo 我没有复制我使用这个想法的代码,所以它对我有用 那个乘法代码似乎不对。由于整数转换/截断,只有 exactly 1.0 的浮点值会以这种方式变为 255; 0.999 的值将变为 254,这是不可取的,因为它也应该是 255。结果不应该是 254,直到你一路下降到 0.996 左右。我认为您想乘以 255.999 而不是 255。这将更好地分配到 0 到 255 的整数中。

以上是关于CGColor - CGColorGetComponents 似乎无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确获取 CGColor 的颜色分量

MonoTouch - 如何有效地创建具有所有 CGColor 类型的列表

如何从 RGB 值中获取 CGColor?

我可以从 CGGradient 获得 CGColor 吗?

将使用 colorWithPatternImage 创建的 NSColor 转换为 CGColor?

高效修改CGColor