概述
-(UIColor *)mainColorOfImage:(UIImage *)image{
#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, image.CGImage);
CGColorSpaceRelease(colorSpace);
//第二步:取每个点的像素值
unsigned char* data =CGBitmapContextGetData (context);
if (data == NULL)return nil;
NSCountedSet cls=[NSCountedSetsetWithCapacity:thumbSize.widththumbSize.height];
for (int x=0; x<thumbSize.width; x++) {
for (int y=0; y<thumbSize.height; 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)];
[clsaddObject: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)];
}
最后
以上就是追寻电话为你收集整理的iOS 获取图片的主题色(主色调)的全部内容,希望文章能够帮你解决iOS 获取图片的主题色(主色调)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复