ios获得UIImage的主色调方法
来源:互联网 发布:05~06赛季科比数据 编辑:程序博客网 时间:2024/05/24 06:49
网络上有一个算法,但是经过测试误差比较,经过我的完善和修改,误差比较小了,消耗时间差不多,网上的算法的地址:
http://www.cocoachina.com/bbs/read.php?tid=181490 点击打开链接
我自己的修改算法如下:
static void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v ){ float min, max, delta; min = MIN( r, MIN( g, b )); max = MAX( r, MAX( g, b )); *v = max; // v delta = max - min; if( max != 0 ) *s = delta / max; // s else { // r = g = b = 0 // s = 0, v is undefined *s = 0; *h = -1; return; } if( r == max ) *h = ( g - b ) / delta; // between yellow & magenta else if( g == max ) *h = 2 + ( b - r ) / delta; // between cyan & yellow else *h = 4 + ( r - g ) / delta; // between magenta & cyan *h *= 60; // degrees if( *h < 0 ) *h += 360;}@implementation CMUIImageManager-(UIColor*)mostColor:(UIImage*)image{ #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;#else int bitmapInfo = kCGImageAlphaPremultipliedLast;#endif //第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大 CGSize thumbSize=CGSizeMake(40, 40); 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; NSArray *MaxColor=nil; // NSCountedSet *cls=[NSCountedSet setWithCapacity:thumbSize.width*thumbSize.height]; float maxScore=0; for (int x=0; x<thumbSize.width*thumbSize.height; x++) { int offset = 4*x; int red = data[offset]; int green = data[offset+1]; int blue = data[offset+2]; int alpha = data[offset+3]; if (alpha<25)continue; float h,s,v; RGBtoHSV(red, green, blue, &h, &s, &v); float y = MIN(abs(red*2104+green*4130+blue*802+4096+131072)>>13, 235); y= (y-16)/(235-16); if (y>0.9) continue; float score = (s+0.1)*x; if (score>maxScore) { maxScore = score; } MaxColor=@[@(red),@(green),@(blue),@(alpha)]; //[cls addObject:clr]; } CGContextRelease(context); 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)];}
0 0
- ios获得UIImage的主色调方法
- [代码分享]UIImage:获取图片主色调
- IOS uiimage 拉伸的方法
- [iOS]从UIImage得到RGB32的方法
- ios中,uiimage拼接图片的方法
- ios开发UIImage imageNamed方法的误用
- ios开发UIImage imageNamed方法的误用
- ios开发UIImage imageNamed方法的误用
- iOS UIimage拉伸的三种方法
- iOS UIImage方法总结
- iOS开发之获取图片的主色调
- iOS 获取图片的主体颜色(主色调)
- iOS中改变UIImage的颜色和大小的方法
- ios开发UIImage imageNamed方法
- IOS UIImage类方法总结
- IOS UIImage类方法总结
- IOS UIImage类方法总结
- IOS UIImage类方法总结
- Chanel iPhone 5 Case bvbolk:n
- UIWebView与js(JavaScript)交互
- XCode快捷键使用
- Exynos4412裸机开发系列教程--TICK机制
- 排列数据的输出(二) 循环处理
- ios获得UIImage的主色调方法
- EaselJS简明教程2-动画
- js 清空某个div中的input标签值
- android之JSON 进行网络数据交换
- Android 给类及方法自动添加注释 高亮显示选中词
- Cocos2d-x 3.1 一步步做屏幕适配
- Description Resource Path Location Type undefined reference to
- 进程控制
- datagrid直接编辑保存的“设计缺陷”