★分享:设置图像的滤镜效果!★

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];。

那个各位大侠可以无视我了,各位菜鸟咱们一起进步吧。哈!

转载于:https://www.cnblogs.com/APTX4869/archive/2012/05/14/2498920.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值