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
- iOS学习笔记--图片美白(一)
- iOS学习笔记--图片美白(二)
- IOS学习笔记41--图片的缩放(一)
- 《iOS开发之美》学习笔记
- iOS学习笔记一
- IOS学习笔记一
- IOS学习笔记一
- iOS学习笔记--图片上传
- IOS学习笔记(一)
- IOS学习笔记(一)
- 学习ios笔记(一)
- IOS学习笔记一 启程
- iOS 学习笔记《一》UIScrollView
- ios学习笔记(一)
- iOS 学习笔记 <一>【经典】
- ios学习笔记连载一
- iOS学习笔记(一)
- ios学习笔记(一)
- Spring的一些总结
- 常见byte[]->DexFile整理一下
- c3p0和QueryRunner的结合使用,让开发更加简便
- maven管理项目如何查找jar依赖
- Jquery 操作 Select 详解
- iOS学习笔记--图片美白(一)
- 2988:计算字符串距离
- 【C】平均分问题
- 让用户输入一个三位数(若不是三位数则提示错误),判断该数是否是水仙花数。(水仙花数:每一位上的数字的立方和,等于该数本身)
- [C++] 编程实践之1: Google的C++代码风格9:规则特例
- 消费者的推拉模式
- 一张图搞定JDK的Executor框架
- C#窗体应用程序之添加Media Player组件制作播放器
- 剑指offer--<重建二叉树>