根据颜色获取对应的RGB值

2017-04-05  本文已影响272人  Mark_Guan

在封装我的小框架( ZPSegmentBarOC )的时候需要根据颜色来获取对应的RGB值,从而达到颜色有渐变的效果,我从网上找了很多资料,在这里记录下:

方法一

/**
 获取颜色的RGB值

 @param components RGB数组
 @param color 颜色
 */
- (void)getRGBComponents:(CGFloat [3])components forColor:(UIColor *)color {
    CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
    unsigned char resultingPixel[4];
    CGContextRef context = CGBitmapContextCreate(&resultingPixel,
                                                 1,
                                                 1,
                                                 8,
                                                 4,
                                                 rgbColorSpace,
                                                 kCGImageAlphaNoneSkipLast);
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
    CGContextRelease(context);
    CGColorSpaceRelease(rgbColorSpace);
    
    for (int component = 0; component < 3; component++) {
        components[component] = resultingPixel[component] / 255.0f;
    }
}

在使用的时候,我们只需要:

CGFloat components[3];
[self getRGBComponents:components forColor:[UIColor blackColor]];
NSLog(@"%f %f %f", components[0], components[1], components[2]);

即可获取RGB的值;

参考: stackoverflow

方法二

- (NSArray *)getRGBWithColor:(UIColor *)color
{
    CGFloat red = 0.0;
    CGFloat green = 0.0;
    CGFloat blue = 0.0;
    CGFloat alpha = 0.0;
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
    return @[@(red), @(green), @(blue), @(alpha)];
}

在使用的时候我们只需要将对应的颜色传入进去即可,该方法就会给我们返回一个数组,里面包括了RGB还有Alpha,较方法一更为简便;

上一篇下一篇

猜你喜欢

热点阅读