歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中對大圖的處理的實現和分析

Android中對大圖的處理的實現和分析

日期:2017/3/1 11:16:07   编辑:Linux編程

在應用中實現圖像變換相關的處理時,有時會遇到分配內存失敗(OutOfMemoryError)的問題。比如我用N1拍照的分辨率是2500x1900,格式為jpg。使用Bitmap類將打開後,由於是從文件讀取,它的屬性被設為不能修改(mutable),如果想在大小不變的情況下修改它,只能使用createbitmap建立一個等大的可編輯的bitmap。同時打開兩個大文件,就會出現內存不足的提示。使用bitmap類的copy方法,同樣會出現這個問題,而使用option設置縮放參數又會影響圖像的質量,降低分辨率,不能達到想要的效果。

試了多種方法,有一種非常不好的方法可以實現,就是把圖片解碼後存入一個臨時文件,釋放源bitmap,然後用createbitmap建立一個可編輯的空圖,再從數據文件中以流的方式讀出數據,處理後使用setpixel賦值給bitmap再保存成圖片格式,但是這種方法非常慢,無法忍受。

最後的解決方法是使用JNI方法,在C庫中分配內存,將圖傳入庫中及對圖片進行處理,釋放源圖,建立可編輯的新圖,再從庫中讀出編輯後的數據,賦值給新圖。因為對單個應用內存的限制是在java虛擬機中實現的,所以對C層面並不影響,而且在c庫中數據處理,還可以提高處理速度。這樣使用簡單的函數調用方式就可以實現了,只是需要要實現JNI,並且將so庫編進apk,代碼上比較麻煩,但效果很不錯。

Copyright © Linux教程網 All Rights Reserved