Gan*_*esh 7 iphone quartz-graphics cgcolor cgcolorspace
我有一个黑色的UILabel;
我正在编写以下代码来获取黑色的组件.
UIColor *aColor = [aLabel.textColor retain];
const CGFloat* components = CGColorGetComponents(aColor.CGColor);
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
Run Code Online (Sandbox Code Playgroud)
但这总是给出绿色成分而不是黑色成分;
有人对此有所了解吗?
我通过不同的色彩空间吗?
:-( 请帮我.
Mat*_*uch 13
很可能是错误的色彩空间.我想灰度色彩空间的alpha分量会得到你认为绿色成分的位置.
我使用此函数从UIColor创建一个字符串,我只遇到RGB和灰度颜色空间,所以我只用少于4(R + G + B + A)组件的每种颜色解释为灰度.
if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
const CGFloat *components = CGColorGetComponents(color.CGColor);
color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
NSLog(@"no rgb colorspace");
// do seomthing
}
const CGFloat *components = CGColorGetComponents(color.CGColor);
NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];
Run Code Online (Sandbox Code Playgroud)
当然这种方法并不适用于所有情况,您应该根据您的要求采用它.
你看到什么样子的原因r=0,g=1,b=0,a=0是因为你曲解返回数组中的值作为一个被RGB颜色模型.在这种情况下,UIColor将单色色彩空间用于灰度等颜色,如黑色.
您所看到的是2来自单色模型的一系列组件.第一个是灰度级(0黑色),第二个是alpha(1不透明).您正在查看的最后两个值是在2元素数组的末尾,恰好0在这种情况下.
你会注意到颜色是黑色的,你尝试CGColorGetNumberOfComponents(color.CGColor),它会返回2.如果你尝试CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)),它返回0它对应于kCGColorSpaceModelMonochrome(见枚举CGColorSpaceModel中CGColorSpace.h)
| 归档时间: |
|
| 查看次数: |
13090 次 |
| 最近记录: |