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

iOS 获取图片的主色调

作者: 冷月花 | 来源:发表于2018-05-10 18:43 被阅读18次

    根据图片获取图片的主色调

    - (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/20, image.size.height/20);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL,
    thumbSize.width,
    thumbSize.height,
    8,//bits per component
    thumbSize.width4,
    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.widththumbSize.height];
    for (int x=0; x<thumbSize.width; x++) {
    for (int y=0; y<thumbSize.height; y++) {
    int offset = 4(xy);
    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)];
    }

    相关文章

      网友评论

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

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