[代码分享]UIImage:获取图片主色调

来源:互联网 发布:无主之地ol激活码淘宝 编辑:程序博客网 时间:2024/05/18 19:42
-(UIColor*)mostColor{
     
     
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
    intbitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
#else
    intbitmapInfo = 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);
     
     
     
    //第二步 取每个点的像素值
    unsignedchar* data = CGBitmapContextGetData (context);
     
    if(data == NULL)returnnil;
     
    NSCountedSet*cls=[NSCountedSetsetWithCapacity:thumbSize.width*thumbSize.height];
 
    for(intx=0; x<thumbSize.width; x++) {
        for(inty=0; y<thumbSize.height; y++) {
             
            intoffset = 4*(x*y);
             
            intred = data[offset];
            intgreen = data[offset+1];
            intblue = data[offset+2];
            intalpha =  data[offset+3];
             
            NSArray*clr=@[@(red),@(green),@(blue),@(alpha)];
            [cls addObject:clr];
             
        }
    }
    CGContextRelease(context);
     
     
    //第三步 找到出现次数最多的那个颜色
    NSEnumerator*enumerator = [cls objectEnumerator];
    NSArray*curColor = nil;
     
    NSArray*MaxColor=nil;
    NSUIntegerMaxCount=0;
     
    while ( (curColor = [enumerator nextObject]) != nil)
    {
        NSUIntegertmpCount = [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
原创粉丝点击