【发布时间】:2015-04-27 11:43:36
【问题描述】:
我有两种颜色,这里是实例的日志:
(lldb) po acolor
UIDeviceRGBColorSpace 0.929412 0.133333 0.141176 1
(lldb) po hexColor
UIDeviceRGBColorSpace 0.929412 0.133333 0.141176 1
我的代码适用于 iPhone 4s 5,但不适用于 iPhone 6:
if ([acolor isEqual:hexColor])
{
// other code here.
}
另外,我从图像的像素中创建了这个颜色:
CGFloat red = (rawData[byteIndex] * 1.0) / 255.0;
CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;
CGFloat blue = (rawData[byteIndex + 2] * 1.0) / 255.0;
CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;
但 iPhone 4 和 iPhone 6 之间的值似乎存在一些差异:
例如,如果我在 iPhone 6 上打印红色,它有:
(lldb) po red
0.92941176470588238
对于 iPhone 4:
(lldb) po red
0.929411768
由于我认为是 32 位和 64 位架构,因此值不同。
但是正如我们在颜色上看到的那样,它们似乎具有正确的值并且似乎是圆角的。但它从不将其与成功相提并论。所以acolor不等于hexColor。绝不。仅适用于 iPhone 4 和 5。
当然我可以使用float 类型而不是CGFloat。但只是注意到四舍五入似乎有效,UIColors 对于不同的设备具有相同的值。但是比较不起作用。
我使用以下方法获得 hexColor:
+ (UIColor *)colorWithHexString:(NSString *)hexString
{
const char *cStr = [hexString cStringUsingEncoding:NSASCIIStringEncoding];
long x = strtol(cStr, NULL, 16);
return [UIColor colorWithHex:(UInt32)x];
}
+ (UIColor *)colorWithHex:(UInt32)col {
unsigned char r, g, b;
b = col & 0xFF;
g = (col >> 8) & 0xFF;
r = (col >> 16) & 0xFF;
return [UIColor colorWithRed:(float)r/255.0f
green:(float)g/255.0f
blue:(float)b/255.0f
alpha:1];
}
【问题讨论】:
-
rawData是如何定义的? -
您尝试使用
- (BOOL)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha吗? -
是的,问题出在原始数据上,如果我们使用 cgfloat,我们有最大的值然后浮动。但我没有比较红色或绿色或蓝色值,因为您可以看到颜色日志与 acolor 和 hexColor 相同,但它不会比较它们。也许也记录四舍五入的值。当然问题出在类型上,所以我只需要一个,例如 float 或 cgfloat,因为我们永远不会成功,例如使用 0.92941176470588238 并且它不能 = 0.929411768。但是我正在比较 UIColors 并且日志告诉我它们对于 RGBA 具有相同的值。
标签: ios 32bit-64bit uicolor iphone-6 iphone-64bit