iOS学习笔记--图片美白(一)
程序员文章站
2022-04-12 20:04:35
ios学习笔记--图片美白。在ios开发中,图片美白通常的方法有自定义方法和第三方框架实现,下面就自己在学习的过程中用到的方法做个整理。
通过自定义方法实现
个人认为图片美白实际上就是对图片的像素点...
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; }
上一篇: 23. 面向对象设计模式
下一篇: ASP.NET三层架构及短信发送案例