2012-10-26 156 views
9

我剛剛encontered一個棘手的問題......保存大型圖像PNG

這裏是我的故事:

我的設備三星Galaxy Note,通常情況下,它需要在圖片的3264分辨率* 2448像素。我喜歡精美的圖片,以便找到詳細的信息,但在這裏我討厭它,因爲它在Android中處理非常巨大。我可以讀取並顯示這個大分辨率的圖像,我需要在它上面畫線,然後我需要將圖像和線條保存爲png。 我頭疼的是,我的Android總是給我出例外memery的,當我想創建一個可變的位圖是這樣的:

Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565); 
    Canvas cv = new Canvas(bmp); 
    //draw a line and save and restore canvas 
    // I found an alternative solution yet proven to be uncorrect: 
    myImageView.setDrawingCacheEnabled(true); 
    myImageView.buildDrawingCache(true); 
    Bitmap bmp = myImageView.getDrawingCache(); 
    //save bmp to png 

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize() 

異常跳出。我已經測試了myImageView.measure(...)myImageView.layout(...),沒有爲我工作。 (事情很好,當我用較小的圖像測試相同的代碼時)

任何專家知道如何殺死這個問題或向我提出解決方案?謝謝!

+0

你有沒有計算認爲,規模和質量的位圖所需的內存。無論您正在開發的平臺如何,它都很大,但是如果您不小心管理位圖對象,則在受限的內存設備上發現更麻煩。 – paulkayuk

+1

你可能想看看http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman

+0

你可能想嘗試第一塊將大的位圖分成幾塊,然後仔細地繪製並對齊它們上的線條。然後,您需要將小部分放回完整的大位圖。 – dumbfingers

回答

1

也許不是定義解決方案,但是您是否嘗試增加堆大小?

對於Android 2.2或更低版本:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes); 

對於Android的2.3 or or higher versions

android:largeHeap="true"