iOS代码获取图片主色调
来源:互联网 发布:医院预约挂号软件 编辑:程序博客网 时间:2024/05/18 20:49
最近的开发过程中,有一个功能是根据银行的图标来确定cell的背景颜色,即获取图片的主色调。网上搜索了一些方法,发现有位博主分享了一个很好的代码方法,不过效果感觉不是特别明显,或者说变化不是很大,如图:
后来仔细想了一下,代码和方法是没有错误的,但是我们把透明颜色以及白色也计算进去了,所以效果才会那么不明显。所以在进行rgb色值获取的时候,排除掉透明色及白色即可,修改后的代码如下:
//根据图片获取图片的主色调+(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(image.size.width/2, image.size.height/2); 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=[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]; if (alpha>0) {//去除透明 if (red==255&&green==255&&blue==255) {//去除白色 }else{ 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)];}最后的效果也是特别明显的,如图:
源文章的url地址:http://www.cocoachina.com/bbs/read.php?tid=181490.
0 0
- iOS代码获取图片主色调
- [代码分享]UIImage:获取图片主色调
- 获取图片主色调
- iOS开发之获取图片的主色调
- iOS 获取图片的主体颜色(主色调)
- KMean clustering算法获取图片主色调
- KMean clustering算法获取图片主色调
- 获取图片的主色调-java
- php使用Imagick获取图片主色调
- PHP 获取图片的主色调
- Android使用Palette获取图片主色调
- Android 使用Palette获取Gallery图片主色调
- 【PHP】识别图片主色调
- iOS图片精确提取主色调算法iOS-Palette(附源码)
- 返回一张图片的主色调
- ios获得UIImage的主色调方法
- ps改变图片色调
- Android Lollipop:使用Palette抽取图片主色调
- android:configChanges
- QT 添加资源文件
- mysql索引总结----mysql 索引类型以及创建
- StrToFloat()精度问题
- TypeScript学习笔记一
- iOS代码获取图片主色调
- 画一张图出来
- RedirectAttributes简介
- android studio查看SHA1,MD5
- react-native-android-guide
- 一些Hadoop面试题及答案
- linux定时备份数据库
- 图片自适应
- C++基本概念