-(UIColor*)mostColor{
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
int
bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
#else
int
bitmapInfo = kCGImageAlphaPremultipliedLast;
#endif
//第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大
CGSize thumbSize=CGSizeMake(50, 50);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(
NULL
,
thumbSize.width,
thumbSize.height,
8,
//bits per component
thumbSize.width*4,
colorSpace,
bitmapInfo);
CGRect drawRect = CGRectMake(0, 0, thumbSize.width, thumbSize.height);
CGContextDrawImage(context, drawRect,
self
.CGImage);
CGColorSpaceRelease(colorSpace);
//第二步 取每个点的像素值
unsigned
char
* data = CGBitmapContextGetData (context);
if
(data ==
NULL
)
return
nil
;
NSCountedSet
*cls=[
NSCountedSet
setWithCapacity:thumbSize.width*thumbSize.height];
for
(
int
x=0; x
for
(
int
y=0; y
int
offset = 4*(x*y);
int
red = data[offset];
int
green = data[offset+1];
int
blue = data[offset+2];
int
alpha = data[offset+3];
NSArray
*clr=@[@(red),@(green),@(blue),@(alpha)];
[cls addObject:clr];
}
}
CGContextRelease(context);
//第三步 找到出现次数最多的那个颜色
NSEnumerator
*enumerator = [cls objectEnumerator];
NSArray
*curColor =
nil
;
NSArray
*MaxColor=
nil
;
NSUInteger
MaxCount=0;
while ( (curColor = [enumerator nextObject]) !=
nil
)
{
NSUInteger
tmpCount = [cls countForObject:curColor];
if
( tmpCount < MaxCount )
continue
;
MaxCount=tmpCount;
MaxColor=curColor;
}
return
[UIColor colorWithRed:([MaxColor[0] intValue]/255.0f) green:([MaxColor[1] intValue]/255.0f) blue:([MaxColor[2] intValue]/255.0f) alpha:([MaxColor[3] intValue]/255.0f)];
}