您的位置:首页 > 移动开发 > Android开发

android平台的图片滤镜

2014-11-27 15:53 323 查看
http://www.icodelogic.com/?p=575 这里提供了几种滤镜的实现.我也下载了代码试了效果,如果图片较小,还是可以接受的,如果图片较大,有些处理过程会失败,内存不足,作者主要是将一些处理用jni实现,并不像其它的库用c来处理的,当然可能种种原因了.

还有一些java处理的,好像是老外写的:http://www.jhlabs.com/ip/filters/index.html,

还有http://www.cnblogs.com/daizhj/archive/2012/05/15/2501406.html也是纯java实现的.

不管如何,对于移动设备的java,内存稍不注意就会出现不够用的情况,况且,如果是一个图片应用,本身其它列表已经加载了不少的内存,再处理一张图片的话,就很容易崩溃了.

常见一些软件的图片滤镜处理能力还是不错的,如腾讯微博的,我就试过,一张图片i9000拍照的最高精度,缩放1/2再加载,然后用腾讯的库处理滤镜的效果,内存大约是占用了9m,速度相当快.谁叫人家有钱,请的都是高手.

说了这么多,其实主要目的在于说明.滤镜的处理虽然用c,但java通过jni与c连接,还是可以反编译出来的.

在这里是技术交流,我也不会把腾讯的库反编译了然后再弄一个java调用的例子放上来,这是不合法地.

从jni调用来看,它的流程大约是这样的:

先实例化一个jni连接的类,里面有5个方法.分别是初始化设置图片数据,释放内存,处理滤镜,获取高,获取宽.

外部的调用过程:先设置图片数据,初始化滤镜的种类,这个种类是从资源文件里读取的,大约10种,然后在gallery中选中某种效果后找到对应种类的索引值,氢把这个索引值与之前的bitmap的byte[]数组一起传入,之后就可以得到一个rgb数组了,然后用这个rgv数组进行构造bitmap.

这些调用jni是在一个iamge360jni类中,然后记得在处理完成后得到了想要的图片,需要进行资源释放 .调用recycle,名字混淆了自己找吧.

如果有兴趣的,可以把它的程序拿出来看看,过程还是蛮容易的.在graphic包中包含了一个e类,包含这些调用.jni类比较单独,容易找的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: