获得uivew的主要,次要和第三色

时间:2016-11-17 05:28:29

标签: ios objective-c uiview uiimage

我使用以下代码将uiview转换为uiimage

- (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

然后我使用以下代码从uiimage获得平均颜色。

-(UIColor *)averageColorOfImage:(UIImage*)image{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    unsigned char rgba[3];
    CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), image.CGImage);
    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
    if(rgba[2] > 0) {
        CGFloat alpha = ((CGFloat)rgba[3])/255.0;
        CGFloat multiplier = alpha/255.0;
        return [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier
                               green:((CGFloat)rgba[1])*multiplier
                                blue:((CGFloat)rgba[2])*multiplier
                               alpha:alpha];
    }else {
        return [UIColor colorWithRed:((CGFloat)rgba[0])/255.0
                               green:((CGFloat)rgba[1])/255.0
                                blue:((CGFloat)rgba[2])/255.0
                               alpha:((CGFloat)rgba[3])/255.0];
    }
}

但是虽然uiview是红色的,但它总是白色的。

为什么这样?我怎样才能获得rgba颜色代码?或uiimage的主要,次要和第三色?

1 个答案:

答案 0 :(得分:1)

这是您的代码中的一个问题,可能还有其他问题 - 这是通过代码的快速读取发现的。

在您的代码中,您声明:

unsigned char rgba[3];

这声明了一个C风格(而不是Cocoa)固定大小的三个元素数组;这些元素可以rgba[0]rgba[1]rgba[2]访问。您的代码继续将其用作四个元素数组,并使用存在的rgba[4]。 C样式数组没有边界检查,因此您的代码会破坏内存。

您需要声明数组有四个元素:

unsigned char rgba[4];