如何获得图像的前三种平均颜色?

时间:2013-08-27 09:19:11

标签: iphone ios objective-c ios5 ios6

在我的应用程序中,我需要显示图像的前三种平均颜色(主要是用过的颜色)。我怎么能得到这个?我尝试下面的代码来获得一个平均颜色,但我需要基于其礼物水平的三种颜色。 恩。样本输出:
 蓝色#0000FF  Aqua#00FFFF  灰色#808080

- (UIColor *)averageColor {

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char rgba[4];
CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextDrawImage(context, CGRectMake(0, 0, 1, 1),  given_Img.CGImage);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
UIColor *colorOfArtwork;



if(rgba[3]) {
    NSLog(@"rgba[3]");
    CGFloat alpha = ((CGFloat)rgba[3])/255.0;
    CGFloat multiplier = alpha/255.0;

  return colorOfArtwork = [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier
                                     green:((CGFloat)rgba[1])*multiplier
                                      blue:((CGFloat)rgba[2])*multiplier
                                     alpha:alpha];
}
else {
   return colorOfArtwork =  [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];
}

}

enter image description here

1 个答案:

答案 0 :(得分:1)

NSMutableDictionary * dicColors;

循环遍历每个像素,如果在dicColors中输入然后递增该值,则在dicColors中为此颜色添加一个初始值为1的新条目。

转换为NSArray并排序

获取数组的前3个元素。如果您的图像为空白或纯色,则此数组可能只有1个或2个条目,因此请检查它。