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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值