zoukankan      html  css  js  c++  java
  • iOS UIImage:获取图片主色调

    本文转载至 http://www.wahenzan.com/a/mdev/ios/2015/0325/1677.html

     

    -(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)];

    }

     

     

     

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

    http://www.cocoachina.com/bbs/read.php?tid=181490
    http://www.wahenzan.com/a/mdev/ios/2015/0325/1677.html

  • 相关阅读:
    Jmeter简单教程
    SpringMVC @RequestBody请求参数在postman中的请求
    maven多环境部署
    idea中项目文件颜色含义
    本地Consumer和Producer无法使用远程Kafka服务器的处理办法
    CentOS7 64位下MySQL5.7安装与配置(YUM)
    git学习笔记
    Nginx的启动、重启、关闭命令
    Mysql update 错误
    spring框架源码编译
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/5329796.html
Copyright © 2011-2022 走看看