在 Objective-C 中获取颜色的组件

get components of color in objective-c

提问人:L. Kvri 提问时间:2/22/2012 更新时间:2/22/2012 访问量:1243

问:

这是获取颜色的RGB组件的代码片段。如果_countComponents小于 4,例如 2,我该怎么办?我试图获取灰色 [UIColor grayColor] 的组件

int _countComponents = CGColorGetNumberOfComponents(colorRef);

if (_countComponents == 4) {
    const CGFloat *_components = CGColorGetComponents(colorRef);
    CGFloat red     = _components[0];
    CGFloat green = _components[1];
    CGFloat blue   = _components[2];
    CGFloat alpha = _components[3];
Objective-C 组件 UIcolor

评论

0赞 sch 2/22/2012
“我试图获取灰色 [UIColor grayColor] 的组件”是什么意思?

答:

1赞 sch 2/22/2012 #1

颜色的分量取决于关联的色彩空间

所以 、 等不是必需的红色、绿色、蓝色和 alpha。_components[0]_components[1]

6赞 Caleb 2/22/2012 #2

如果你有一个 UIColor 实例,并且想要它的 RGB 值,为什么不使用该方法呢?-getRed:green:blue:alpha:

CGFloat r, g, b, a;
BOOL success = [myColor getRed:&r green:&g blue:&b alpha:&a];
if (success) {
    // the color was converted to RGB successfully, go ahead and use r,g,b, and a.
}
1赞 Peter M 2/22/2012 #3

新答案

重新阅读问题后。要回答格雷组件问题,您可以通过 -(BOOL)getWhite:alpha 读取它:

所以你会按照 Caleb 做这样的事情:

BOOL success = [myColor getWhite:&w alpha:&a];

这为您提供了 0 到 1 的灰度值和 0 到 1 的 alpha 值wa

请参阅 Apple 文档 getWhite:alpha:

旧答案

从这个 SO 问题如何访问 uicolor 的颜色组件

请参阅(相当旧的)ArsTechnica 文章 iphone-development-accessing-uicolor-components

评论

0赞 Caleb 2/22/2012
+1 别再看问题了——你让我们其他人看起来很傻。