返回一张图片的主色调
2016-03-05 09:41
253 查看
#import <UIKit/UIKit.h> @interface UIColor (YKD) /** * 返回一张图片的主色调 */ + (UIColor *)mostColorWithImage:(UIImage *)image; @end
// // UIColor+YKD.m #import "UIColor+YKD.h" @implementation UIColor (YKD) + (UIColor *)mostColorWithImage:(UIImage *)image { // 1.先把图片缩小,加快计算速度,但越小结果误差可能越大 CGSize thumbSize = CGSizeMake(50, 50); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, thumbSize.width, thumbSize.height, 8, thumbSize.width*4, colorSpace, kCGImageAlphaPremultipliedLast); CGRect drawRect = CGRectMake(0, 0, thumbSize.width, thumbSize.height); CGContextDrawImage(context, drawRect, image.CGImage); CGColorSpaceRelease(colorSpace); // 2.取每个点的像素值 unsigned char *data = CGBitmapContextGetData(context); if (data == NULL) { return nil; } NSCountedSet *cls = [NSCountedSet setWithCapacity:thumbSize.width*thumbSize.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)]; [cls addObject:clr]; } } CGContextRelease(context); // 3.找到出现次数最多的那个颜色 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; } // 4.返回 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)]; } @end
相关文章推荐
- CoreData版本自动变迁
- pixhawk自学笔记之Mixer学习
- 4415: [Shoi2013]发牌|线段树|并查集
- 背包问题先记录一下
- [唐诗]野望-王绩
- Caffe安装问题汇总
- 如何在程序中判断当前的qq空间图像是默认的空间图像------我现在已经不太喜欢严密的东东了
- Android在Fragment中使用Tab
- Java面试题之一对调两个数
- git完整教程
- Ranged-Based for loop vs. iterator
- 8款设计师常用漂亮的HTML CSS表格样式
- iOS、OC和Objective-C的区别
- Python核心教程(第二章)
- mybatis如何防止sql注入
- [唐诗]禅-虞世南
- 网线主管
- php中的file函数
- Spring Integration- EIP
- 修改导航条navigationBar和标签栏TabBar的里外颜色颜色(任何地方都能修改,但一般放在AppDelegate最好)