从UIColor中提取rgb
看到这个问题之前,但我的例子似乎并没有工作。
const CGFloat *toCol = CGColorGetComponents([[UIColor greenColor] CGColor]);
用GDB查看数组是空的。 任何提示?
你提供的代码示例应该可以工作。
尝试这个:
UIColor uicolor = [[UIColor greenColor] retain]; CGColorRef color = [uicolor CGColor]; 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]; } [uicolor release];
在iOS 5中,您可以使用:
UIColor *color = [UIColor orangeColor]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { const CGFloat *components = CGColorGetComponents(color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; }
这是一个全面的解决scheme,也考虑到非RGB颜色,例如[UIColor blackColor]
UIColor *color = [UIColor blackColor]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; // iOS 5 if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { // < iOS 5 const CGFloat *components = CGColorGetComponents(color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; } // This is a non-RGB color if(CGColorGetNumberOfComponents(color.CGColor) == 2) { CGFloat hue; CGFloat saturation; CGFloat brightness; [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; }
只需使用memcpy:
CGColorRef tmpColor = [[currentColorView backgroundColor] CGColor]; CGFloat newComponents[4] = {}; memcpy(newComponents, CGColorGetComponents(tmpColor), sizeof(newComponents)); // now newComponents is filled with tmpColor rgba data
感谢Willster的指导。 对于那些正在使用灰度色(使用colorWithWhite:alpha:
创build)的人,下面的代码示例将让您找出白色值(HSV方法不适用于以此方式创build的颜色)。
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0, white = 0.0; // This is a non-RGB color if(CGColorGetNumberOfComponents(self.color.CGColor) == 2) { [self.color getWhite:&white alpha:&alpha]; } else { // iOS 5 if ([self.color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [self.color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { // < iOS 5 const CGFloat *components = CGColorGetComponents(self.color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; } }
这篇文章帮助我解决了这个问题,或者至less构build了解决这个问题的框架。
http://developer.apple.com/iphone/library/qa/qa2007/qa1509.html
下面是一些更直接的示例代码,用于从任意颜色获取RGB分量:
从UIColor预设中获取RGB值
结帐uicolor实用程序 。 看起来像一个非常好的图书馆做这个和UIColor许多其他有用的东西。 例如,有了这个库,你可以写:
CGFloat red = [myColor red];