当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS学习笔记--图片美白(一)

iOS学习笔记--图片美白(一)

2018年09月14日  | 移动技术网移动技术  | 我要评论

ios学习笔记--图片美白。在ios开发中,图片美白通常的方法有自定义方法和第三方框架实现,下面就自己在学习的过程中用到的方法做个整理。

通过自定义方法实现
个人认为图片美白实际上就是对图片的像素点进行修改,可以分为一下几个步骤:
第一步:拿到图片;
第二步:创建颜色空间;
第三步:创建图片上下文;
第四步:绘制图片;
第五步:对像素点进行修改;
第六步:创建image对象;
第七步:释放内存。
下面上代码:

//定义宏用来获取argb分量值
#define mask8(x) ((x) & 0xff)
#define r(x) ( mask8(x) )
#define g(x) ( mask8(x >>8 ) )
#define b(x) ( mask8(x >>16) )
#define a(x) ( mask8(x >>24) )
#define rgbamake(r, g, b, a) ( mask8(r) | mask8(g) << 8 | mask8(b) << 16 | mask8(a) << 24)
+(uiimage *)picturethewhitening:(uiimage *)image
{
    int lumi = 10;
    //第一步:拿到图片
    cgimageref imageref = [image cgimage];
    nsuinteger width = cgimagegetwidth(imageref);
    nsuinteger height = cgimagegetheight(imageref);

    //第二步:创建颜色空间
    cgcolorspaceref colorspaceref = cgcolorspacecreatedevicergb();

    uint32 * inputpixels = (uint32*)calloc(width * height, sizeof(uint32));

    //第三步:创建图片上下文
   cgcontextref contextref =  cgbitmapcontextcreate(inputpixels, width, height, 8, width * 4, colorspaceref, kcgimagealphapremultipliedlast | kcgbitmapbyteorder32big);

    //第四步:绘制图片
    cgcontextdrawimage(contextref, cgrectmake(0, 0, width, height), imageref);

    //第五步:对像素点进行修改
    for (int i = 0; i < height; i++)
    {
        for(int j = 0;j < width; j++)
        {
            uint32 * currentpixels = inputpixels + i * width + j;

            uint32 color = * currentpixels;
            uint32 colora,colorr,colorg,colorb;

            colorr = r(color);
            colorr = colorr + lumi;
            colorr = colorr > 255 ? 255 : colorr;

            colorg = g(color);
            colorg = colorg + lumi;
            colorg = colorg > 255 ? 255 : colorg;

            colorb = b(color);
            colorb = colorb + lumi;
            colorb = colorb > 255 ? 255 : colorb;

            colora = a(color);
            *currentpixels = rgbamake(colorr, colorg, colorb, colora);
        }
    }

    //第六步:创建image对象
    cgimageref newimageref = cgbitmapcontextcreateimage(contextref);
    uiimage * newimage = [uiimage imagewithcgimage:newimageref];

    //第七步:释放内存
    cgcolorspacerelease(colorspaceref);
    cgcontextrelease(contextref);
    cgimagerelease(newimageref);
    free(inputpixels);

    return newimage;
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网