首页 存档 技术 查看内容

程序员取悦女票的正确姿势---Tip1(iOS美容篇) 具体流程

2018-3-30 13:00 |来自: 互联网 334 0

摘要: ▲点击上方“CocoaChina”关注即可免费学习iOS开发 前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片。app独一无二,虽简亦繁 ...

▲点击上方“CocoaChina”关注即可免费学习iOS开发


前言

女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片。app独一无二,虽简亦繁。


JH定律:
魔镜:最漂亮的女人是你老婆
魔镜:程序员不是木头人

核心技术

图片滤镜核心技术的基本思路如下:


核心技术流程

具体流程

1、创建一个图像处理工具类

注:该类实例包括一个图像处理方法,该方法在传入原始图像和一个颜色矩阵后生成一个处理好的图像。

@inte**ce JHFeilterManager : NSObject

@property (nonatomic,copy)imageBlock imageBLOCK;

- (UIImage *)createImageWithImage:(UIImage *)inImage colorMatrix:(const float *)f;


2、获取图像的每个像素点的RGBA值数组

注:该c方法返回一个指针,该指针指向一个数组,数组中的每四个元素都是图像上的一个像素点的RGBA的数值(0-255),用无符号的char是因为它正好的取值范围就是0-255

static unsigned char *RequestImagePixelData(UIImage * inImage){


CGImageRef img = [inImage CGImage];

CGSize size = [inImage size];

//使用上面的函数创建上下文

CGContextRef cgctx = CreateRGBABitmapContex(img);

CGRect rect = {{0,0},{size.width,size.height}};

//将目标图像绘制到指定的上下文,实际为上下文内的bitmapData。

CGContextDrawImage(cgctx, rect, img);

unsigned char *data = CGBitmapContextGetData(cgctx);

//释放上面的函数创建的上下文

CGContextRelease(cgctx);

cgctx = NULL;

return data;

}


3、调整一个像素点的RGBA值

注:如下方法传入参数为数值指针和一个颜色矩阵,通过颜色矩阵调整指针指向地址存储的数值

static void changeRGB(int *red,int* green,int*blue,int*alpha ,const float *f){

int redV = *red;

int greenV = *green;

int blueV = *blue;

int alphaV = *alpha;

//色值重新计算 计算规则如下

*red = f[0] * redV f[1]*greenV f[2]*blueV f[3] * alphaV f[4];

*green = f[5] * redV f[6]*greenV f[7]*blueV f[8] * alphaV f[9];

*blue = f[10] * redV f[11]*greenV f[12]*blueV f[11] * alphaV f[14];

*alpha = f[15] * redV f[16]*greenV f[17]*blueV f[18] * alphaV f[19];

*red

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部