★分享:设置图像的滤镜效果!★
http://www.cocoachina.com/bbs/read.php?tid=69525
★分享:设置图像的滤镜效果!★
那个给图片加滤镜,就是把图像变为黑白色、底色发黄什么的效果,这里首先要感谢论坛里的evangel哥哥,我是在他的分享的基础上进行扩展的,并且在查阅文档之后,在该加注释的地方都加了注释,希望大家看得懂。我先说一下原理:
用Core Graphic的API,把图片解析成RGBA四通道的位图放入内存,然后内存中有一个数组,数组中的每四个元素都是图像上的一个像素点的RGBA的数值(0-255),你只要改变RGB的数值,再写回去重新生成就可以了。简单的变化RGB很好改的,变为黑白照片就是把每个像素点的RGB的值相加求平均值,再回写回去。例如:R=B=G=100,就是灰色的,你只要写个for循环,把每个像素点的RGB都改成各自的平均值,照片就变为黑白色了。如果图像变为怀旧照片,就是底色发黄的,就是RG的比值调高,B保持不变,因为红绿相配就是黄色。
这里面大家可以借助Android里的ColorMatrix(颜色矩阵)的概念,你们百度一下,看看ColorMatrix的原理,就更好理解代码该如何写了,其是重要的就是把每个像素点的RGB调整为什么样的新值,这个可能就需要美术人员的介入了哦!我在例子中用的色彩调整的ColorMatrix.h里的常量就是新生成的RGBA的系数,ColorMatrix.h里的数组的写法和新的RGBA生成的算法就是参照Android的ColorMatrix完成的,所以大家想看懂,一定要先看Android的ColorMatrix哦!哈!
截图如下所示:
Android的ColorMatrix的参考文章如下所示:
http://www.cnblogs.com/leon19870907/articles/1978065.html
程序如下所示:
ImageProcessingDemo.zip (1400 K) 下载次数:930
刚刚发现有一处内存泄漏,请大家在ImageProcessingViewController.m里的effectChangeOnBg方法的最前面加上NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];,还有最后面的[self performSelectorOnMainThread:@selector(endEffectChange) withObject:nil waitUntilDone:YES];的前面加上[pool drain];。
那个各位大侠可以无视我了,各位菜鸟咱们一起进步吧。哈!
用Core Graphic的API,把图片解析成RGBA四通道的位图放入内存,然后内存中有一个数组,数组中的每四个元素都是图像上的一个像素点的RGBA的数值(0-255),你只要改变RGB的数值,再写回去重新生成就可以了。简单的变化RGB很好改的,变为黑白照片就是把每个像素点的RGB的值相加求平均值,再回写回去。例如:R=B=G=100,就是灰色的,你只要写个for循环,把每个像素点的RGB都改成各自的平均值,照片就变为黑白色了。如果图像变为怀旧照片,就是底色发黄的,就是RG的比值调高,B保持不变,因为红绿相配就是黄色。
这里面大家可以借助Android里的ColorMatrix(颜色矩阵)的概念,你们百度一下,看看ColorMatrix的原理,就更好理解代码该如何写了,其是重要的就是把每个像素点的RGB调整为什么样的新值,这个可能就需要美术人员的介入了哦!我在例子中用的色彩调整的ColorMatrix.h里的常量就是新生成的RGBA的系数,ColorMatrix.h里的数组的写法和新的RGBA生成的算法就是参照Android的ColorMatrix完成的,所以大家想看懂,一定要先看Android的ColorMatrix哦!哈!
截图如下所示:
Android的ColorMatrix的参考文章如下所示:
http://www.cnblogs.com/leon19870907/articles/1978065.html
程序如下所示:
ImageProcessingDemo.zip (1400 K) 下载次数:930
刚刚发现有一处内存泄漏,请大家在ImageProcessingViewController.m里的effectChangeOnBg方法的最前面加上NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];,还有最后面的[self performSelectorOnMainThread:@selector(endEffectChange) withObject:nil waitUntilDone:YES];的前面加上[pool drain];。
那个各位大侠可以无视我了,各位菜鸟咱们一起进步吧。哈!