我想將ArrayList中包含的許多小型位圖合併爲一個大型位圖。Android將許多位圖合併爲一個大的位圖出錯並且無法回收位圖
但是,我不知道爲什麼大的位圖是循環的。這意味着它似乎只複製數組中的第一個元素。我試圖繪製數組中的每個小的位圖來測試,它工作正常,但是當我像下面的代碼一樣運行循環時,它出錯了。
在addiditon,當我添加了bmp.recycle()
和bmp = null
,它會導致錯誤「試圖使用回收的位圖」。我不明白錯誤發生的原因。
你能幫我嗎,謝謝!
public static Bitmap getBitmapForVisibleRegion(WebView webview) {
Bitmap returnedBitmap = null;
webview.setDrawingCacheEnabled(true);
returnedBitmap = Bitmap.createBitmap(webview.getDrawingCache());
webview.setDrawingCacheEnabled(false);
return returnedBitmap;
}
public void CombineBitmap(){
ArrayList<Bitmap> bmps = new ArrayList<Bitmap>();
for (int i = 0; i < webView.getWidth; i+=needToCapture){
bmps.add(getBitmapForVisibleRegion(webView));
webView.scrollBy(needToCapture, 0);
}
Bitmap bigbitmap = Bitmap.createBitmap(largeBitmapWidth, largeBitmapHeight, Bitmap.Config.ARGB_8888);
Canvas bigcanvas = new Canvas(bigbitmap);
Paint paint = new Paint();
int iWidth = 0;
for (int i = 0; i < bmps.size(); i++) {
Bitmap bmp = bmps.get(i);
bigcanvas.drawBitmap(bmp, iWidth , 0, paint);
iWidth +=bmp.getWidth();
bmp.recycle();
bmp=null;
}
}
bigcanvas.drawBitmap(bmp,iWidth,0,paint);在這裏,你使用bmp對象在畫布中繪製,並且在一行之後,你正在回收它bmp.recycle(); //這就是爲什麼它給你錯誤「嘗試使用回收的位圖」。 –
我能猜到的唯一問題是您在List bmp中多次添加相同的位圖。 –
@SherifelKhatib:我檢查了數組中的每個位圖,它們完全不同。那麼,爲什麼我會遇到這個問題? – lolyoshi