我想将ArrayList中包含的许多小位图组合成一个大位图。
但是,我不知道为什么大位图是循环的。这意味着它似乎只复制数组中的第一个元素。我试图在数组中绘制每个小位图进行测试并且它工作正常,但是当我像下面的代码一样运行循环时,它会出错。
在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;
}
}
答案 0 :(得分:1)
我终于找到了我的问题。这是因为我的假错误。
我必须使用scrollTo而不是scrollBy
更改为scrollTo后,一切正常。这真的是一种有用的体验。
答案 1 :(得分:0)
根据Bitmap.createBitmap(位图)的文档,
从源位图返回不可变位图。新位图可以是与源相同的对象,也可以是副本。它的初始化密度与原始位图相同。
因此,请替换
returnedBitmap = Bitmap.createBitmap(webview.getDrawingCache());
带
returnedBitmap = webview.getDrawingCache().copy(Config.ARGB_8888, false);