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 似乎无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
MonoTouch - 如何有效地创建具有所有 CGColor 类型的列表