2013-09-26 59 views
1

我已搜索並找到旋轉圖像的簡單代碼。我將ImageView對象的圖像拖動到位圖中,旋轉並放回位圖。我意識到這不是最有效的方法,但我認爲它不會在沒有在CATCH塊中給出錯誤消息的情況下崩潰。Android:旋轉大圖像崩潰而不會引發錯誤

這是我的代碼。根據我想要旋轉的方向,傳入的唯一值是「r」或「l」。聰明的圖像(1500x1500或更小)工作得很好。事情在2500x2500的尺寸下變差。

public void rotate(String dir) 
{ 
    try 
    { 
     float angle = (dir.equals("r") ? 90 : -90); 
     Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
     Matrix matrix = new Matrix(); 
     matrix.reset(); 
     matrix.postRotate(angle); 
     bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); 
     imageView.setImageBitmap(bitmap); 
    } 
    catch(Exception e) 
    { 
     Utilities.logError(e.toString()); 
    } 
} 

任何線索,爲什麼它的崩潰和爲什麼它不thow異常?我只是收到一條消息:「不幸的過程....已停止」,我被踢回了我的應用程序的歡迎屏幕。

哦,對於踢我的角度設置爲零(硬編碼),它沒有崩潰。我懷疑旋轉時間太長,而Android則適合。但我不確定如何確認問題或如何告訴Android等待一段時間。

即使我減少旋轉的預覽圖像,當我去保存時,我將不得不旋轉全尺寸圖像至少一次,並會遇到同樣的問題。我不是嗎?

+1

其崩潰後的堆棧跟蹤 – Raghunandan

回答

2

我可以或多或少的保證不看日誌,你會得到一個內存不足的例外。

您需要使用較小的圖像或使用不同的方法進行旋轉,這樣不會佔用太多內存(您在這裏同時分配2個2500x2500位圖!這太棒了!)。

嘗試使用RotateAnimation來取代您的效果。

希望這有助於:)

+0

這部分是內存和部分超時問題。我在UI線程中旋轉,在某些情況下它只是花了太長時間。當我的應用程序也在做一些其他的東西時,它只會耗盡內存,但我敢打賭,它會在許多其他設備上出現問題。非常適合模擬器。他們都沒有問題。只有真正的手機。謝謝! –