[代码分享]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)];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值