我在比较UIColors时遇到了问题.我有一个图像,我已成功提取用户点击的图像上的颜色.现在我想将这种颜色与其他颜色进行比较,但是我得到了一些奇怪的结果.这是我尝试过的:
CGColorRef pixelColor = [[buttonImage colorAtPixel:point] CGColor];
UIColor* color = [UIColor colorWithCGColor:pixelColor];
UIColor* aqua = [UIColor colorWithRed:0.521569 green:0.768627 blue:0.254902 alpha:1];
if (CGColorEqualToColor(color.CGColor, aqua.CGColor)) {
DLog(@"Apparently, it works");
}
DLog(@"%@", color.CGColor);
DLog(@"%@", aqua.CGColor);
Run Code Online (Sandbox Code Playgroud)
输出:
2011-05-21 19:48:27.144 Coffee[66860:207] -[DescriptorsViewController touchesEnded:withEvent:] <CGColor 0x4d1eb80> [<CGColorSpace 0x4d1a070> (kCGColorSpaceDeviceRGB)] ( 0.521569 0.768627 0.254902 1 )
2011-05-21 19:48:27.145 Coffee[66860:207] -[DescriptorsViewController touchesEnded:withEvent:] <CGColor 0x4d1f750> [<CGColorSpace 0x4d1a070> (kCGColorSpaceDeviceRGB)] ( 0.521569 0.768627 0.254902 1 )
Run Code Online (Sandbox Code Playgroud)
看起来CGColor地址不同,但CGColorSpaces是一样的,但我无法弄清楚如何比较CGColorSpaces
我也试过这个:
CGColorRef pixelColor = [[buttonImage colorAtPixel:point] CGColor];
UIColor* color = [UIColor colorWithCGColor:pixelColor];
UIColor* aqua = [UIColor colorWithRed:0.521569 green:0.768627 blue:0.254902 alpha:1];
if ([color isEqual:aqua]) {
DLog(@"Apparently, it works");
}
DLog(@"%@", color.CGColor);
DLog(@"%@", aqua.CGColor);
Run Code Online (Sandbox Code Playgroud)
发生同样的愚蠢.
2011-05-21 20:02:49.277 Coffee[67013:207] -[DescriptorsViewController touchesEnded:withEvent:] <CGColor 0x4d3b810> [<CGColorSpace 0x5912010> (kCGColorSpaceDeviceRGB)] ( 0.521569 0.768627 0.254902 1 )
2011-05-21 20:02:49.278 Coffee[67013:207] -[DescriptorsViewController touchesEnded:withEvent:] <CGColor 0x4d3ba20> [<CGColorSpace 0x5912010> (kCGColorSpaceDeviceRGB)] ( 0.521569 0.768627 0.254902 1 )`
Run Code Online (Sandbox Code Playgroud)
art*_*nig 16
对于CGColor可以使用的功能CGColorEqualToColor:
bool CGColorEqualToColor (
CGColorRef color1,
CGColorRef color2
);
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法获取和比较色彩空间:
CGColorSpaceModel aquaCm = CGColorSpaceGetModel(CGColorGetColorSpace([UIColor aquaColor].CGColor);
CGColorSpaceModel cm = CGColorSpaceGetModel(CGColorGetColorSpace(pixelColor);
if (aquaCm == cm) {
//compare colors in the same colorspace here
}
Run Code Online (Sandbox Code Playgroud)
对于不在同一色彩空间中的颜色,您可以将它们转换为适当的色彩空间,如本问题所示,或者由于您正在与系统颜色进行颜色比较,因此与生成的颜色进行比较[UIColor colorWithRed:green:blue:alpha:](最有可能在 RGB 色彩空间中)你的形象是什么)