美文网首页
获取图片主色调

获取图片主色调

作者: 雨雪霏霏why | 来源:发表于2016-03-17 16:17 被阅读442次
    -(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)];
    }```

    相关文章

      网友评论

          本文标题:获取图片主色调

          本文链接:https://www.haomeiwen.com/subject/iesclttx.html