2

我有两种颜色,这里是实例的日志:

(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。

当然我可以使用floattype 而不是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];
}
4

1 回答 1

0

您是否尝试将两者四舍五入到相同的十进制数,然后比较它们?例如,如果您同时四舍五入 9 位小数会发生什么?

float rounded = roundf (original * 1000000000) / 1000000000.0;

这段代码改编自 alastair 在这个问题中的帖子:将浮点值舍入到小数点后两位

于 2015-02-25T13:14:28.830 回答