一些小知識點(五)未完待續。。。

  1. RGB顏色與十六進制顏色轉碼工具中此處的RGB值爲SRGB而非普通RGB
    工具地址:http://tool.css-js.com/rgba.html
    十六進制與十進制轉換:http://tool.oschina.net/hexconvert/
    轉換代碼:
#define CTColorHex(c) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 green:((c>>8)&0xFF)/255.0 blue:((c)&0xFF)/255.0 alpha:1.0]
#define CTColorHexA(c,a) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 green:((c>>8)&0xFF)/255.0 blue:((c)&0xFF)/255.0 alpha:(a)]

CTColorHex(0x006800)
CTColorHexA(0x006800,0.2)

上面的十六進制數先轉換成2進制數再右移
&0xFF的話還等於自己(&運算符 只有11與得1 其他都0)
這裏得到十六進制數直接/255.0 轉換成10進制

16進制的006800分別對應2進制的00000110 10000000
2進制轉換成10進制 011010008+32+64104

所以16進制的68=10進制的104
[UIColor colorWithHexString:@"#666666"];
+ (UIColor *)colorWithHexString:(NSString *)stringToConvert
{
    NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

    if ([cString length] < 6)
        return DEFAULT_VOID_COLOR;
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 6)
        return DEFAULT_VOID_COLOR;

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];


    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                           green:((float) g / 255.0f)
                            blue:((float) b / 255.0f)
                           alpha:1.0f];
}

可以試驗一下,然後對比工具轉換的值,然後用Mac的數碼測色計查看,此RGB值爲以sRGB顯示的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章