在Android開發中,有時候會用到圖片裁剪的功能,這時候我們往往會調用系統本身的裁剪(定義一個包含com.android.camera.action.CROP Action的Intent),雖然這樣很簡單,但是系統的裁剪在手機的適配性方面有很多問題,這個我們很難控制。由此,我們決定自己寫代碼搞定這個裁剪。這樣子的話出錯什麼的就比較好控制了。
其實自己寫的話也比較簡單,那就是找到系統處理這個com.android.camera.action.CROP的地方,然後參考源碼自己搞定其中的問題。
這裡我把遇到的問題記錄下:
1、現在的手機拍照越來越強大了,好多手機拍的照片都會超過好幾M,這時候如果直接拿過來用就很容易引起系統OOM的問題。所以載入Bitmap的時候要先對bitmap進行處理。我這裡的處理方式就是先不加在bitmap,首先取得它的寬高,然後決定是否進行壓縮。這樣就可以保證我們的程式不會出問題。
2、拍攝的照片由於相機底層異常的原因,有的手機有照片發生旋轉的情況發生,這時候首先在載入時對圖片進行旋轉一下。但是我們為了滿足使用者的需求,給使用者提供了旋轉圖片操作的權利,所以提供了旋轉的處理。
3、對裁剪完成之後的result處理,系統代碼本身返回的是bitmap,這樣子是很容易引起問題的。最容易發生的系統異常就是android.os.transactiontoolargeexception。所以這裡我對代碼進行了處理,不再返回bitmap圖片了,首先將bitmap圖片放到緩衝裡,傳回一個Uri,這時候我們的應用程式通過Uri讀取這個圖片就可以了。
還有其他的一些功能就不再這裡列出了,因為公司的代碼原因,給出一個demo。這個demo很好的反映了上面問題的處理方式。大家可以在此基礎上再擴充自己的功能,比如對裁剪圖象的特效處理等,這裡My Code就不再列出這些功能了。
demo串連地址:http://download.csdn.net/detail/liuhanhan512/4898700
這個資源要了積分,沒有積分的可以留個郵箱。