Mam niestandardowy WebView
i chcę uzyskać bitmapę jego zawartości (poza ekranem). Kiedyś ten kod, który dostałem od here:Uzyskiwanie bitmapy z WebView generuje awarię OutOfMemory
public static Bitmap getBitmapFromWebviewV2(WebView webView) {
webView.measure(View.MeasureSpec.makeMeasureSpec(
View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
webView.layout(0, 0, webView.getMeasuredWidth(),
webView.getMeasuredHeight());
webView.setDrawingCacheEnabled(true);
webView.buildDrawingCache();
Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas bigcanvas = new Canvas(bm);
Paint paint = new Paint();
int iHeight = bm.getHeight();
bigcanvas.drawBitmap(bm, 0, iHeight, paint);
webView.draw(bigcanvas);
return bm;
}
działa dobrze aż do momentu, kiedy powiększyć dużo, w takim przypadku mogę OutOfMemory wypadku. Testowałem to z tym samym obrazem (nieznacznie powiększony i powiększony do maksimum) i zachowuje się w ten sam sposób, o którym wspomniałem powyżej.
starałem się temu przeciwdziałać, dodając
while(webView.canZoomOut()){
webView.zoomOut();
}
na początku, ale to nie pomaga w ogóle.
Szybkie obejście - można dodać androida: largeHeap = "true" w pliku manifestu więcej pamięci. –
nieprzyjemne obejście, które nie będzie działało przez większość czasu ... po prostu opóźni twój wyjątek OOM – MarkySmarky
dla mnie oczywiste jest, że chcesz uzyskać zbyt dużą bitmapę. Nie możesz uzyskać nieskończonej pamięci w swojej aplikacji. –