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

来源:互联网 发布:php考勤管理系统源码 编辑:程序博客网 时间:2024/04/19 10:00

在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;}

仅供学习使用,如有错误请见谅!

0 0
原创粉丝点击