设为首页 加入收藏

TOP

Android中对大图的处理的实现和分析
2014-11-24 12:23:34 来源: 作者: 【 】 浏览:0
Tags:Android 对大 处理 实现 分析

在应用中实现图像变换相关的处理时,有时会遇到分配内存失败(OutOfMemoryError)的问题。比如我用N1拍照的分辨率是2500x1900,格式为jpg。使用Bitmap类将打开后,由于是从文件读取,它的属性被设为不能修改(mutable),如果想在大小不变的情况下修改它,只能使用createbitmap建立一个等大的可编辑的bitmap。同时打开两个大文件,就会出现内存不足的提示。使用bitmap类的copy方法,同样会出现这个问题,而使用option设置缩放参数又会影响图像的质量,降低分辨率,不能达到想要的效果。


试了多种方法,有一种非常不好的方法可以实现,就是把图片解码后存入一个临时文件,释放源bitmap,然后用createbitmap建立一个可编辑的空图,再从数据文件中以流的方式读出数据,处理后使用setpixel赋值给bitmap再保存成图片格式,但是这种方法非常慢,无法忍受。


最后的解决方法是使用JNI方法,在C库中分配内存,将图传入库中及对图片进行处理,释放源图,建立可编辑的新图,再从库中读出编辑后的数据,赋值给新图。因为对单个应用内存的限制是在java虚拟机中实现的,所以对C层面并不影响,而且在c库中数据处理,还可以提高处理速度。这样使用简单的函数调用方式就可以实现了,只是需要要实现JNI,并且将so库编进apk,代码上比较麻烦,但效果很不错。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android文件管理器的源码实现 下一篇简单的Android中C库调试方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)