从图片中取出像素出现次数最多的颜色(取出图片主色)
来源:互联网 发布:linux内网建站 编辑:程序博客网 时间:2024/05/01 23:42
在项目中,有时为了美观,需要将界面背景或文字颜色依照图片颜色而改变,
此时可使用一下方法。
首先创建UIImage的类目,然后在类目中添加以下方法:
-(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<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);
//第三步 找到出现次数最多的那个颜色
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)];
}
- 从图片中取出像素出现次数最多的颜色(取出图片主色)
- 从数据库中取出图片二进制流
- 如何从pdf文件中取出图片
- 从相册中取出gif图片
- 从沙盒中取出被保存的图片
- 海量数据处理 百度面试题 从40亿IP地址中取出出现次数最多的那个IP地址,我的解法
- 取出内容中插入图片的地址
- 2014华为机试题——取出整型数据中出现次数最多的元素,并按照升序排列返回
- Android中从ImageView中取出图片bitmap注意事项
- 图片取色取出16进制颜色码
- android 从imageloader中取出缓存中的图片
- 图片的插入和取出
- js 从10种颜色中随机取色,并每次取出的颜色不同
- 从数据库取出图片并发布的Servlet
- 如何在struts2的框架下显示从数据库中取出的图片?图片以Blob格式保存,取出后用怎样的标签呢?
- mysql mybatis 分组取出表中使用次数最多的前两条记录
- .net开发笔记之四:显示从数据库中取出的图片
- 请教各位高手一个从数据库中取出图片另存的问题!
- 对称位置排列
- jquery中remove(),detach()和empty()的区别
- z memcpy(for MSVC)小内存高速复制
- 数字信号处理复习
- Java的cmd配置javac能编译成功,但java时出现找不到或无法加载主类 的解决方法
- 从图片中取出像素出现次数最多的颜色(取出图片主色)
- Activity生命周期
- chrome浏览器书签同步问题
- Selenium Chrome启动
- LA 4255(p309)----Guess
- VS2012+EF6+Mysql配置心路历程 - GameMan
- WebAPP输入框被软键盘遮挡肿么办?
- 最大和
- 如何新建gitHub帐号并与自己电脑进行关联