我使用以下代码将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的主要,次要和第三色?
答案 0 :(得分:1)
这是您的代码中的一个问题,可能还有其他问题 - 这是通过代码的快速读取发现的。
在您的代码中,您声明:
unsigned char rgba[3];
这声明了一个C风格(而不是Cocoa)固定大小的三个元素数组;这些元素可以rgba[0]
,rgba[1]
和rgba[2]
访问。您的代码继续将其用作四个元素数组,并使用不存在的rgba[4]
。 C样式数组没有边界检查,因此您的代码会破坏内存。
您需要声明数组有四个元素:
unsigned char rgba[4];