/ / App сривове, когато Bitmap Option inSampleSize = 1 - android, android-canvas, android-image

Приложението се срива, когато опцията Bitmap inSampleSize = 1 - Android, Android-Canvas, android-image

Тествам приложението на моя телефон (размер 720x1280). Приложението работи добре, когато използвам размера на извадката от 2. Когато се опитах да използвам размер на извадката от 1, приложението се срива в линията, където рисувам изображението (код, споменат по-долу). Моля, насочете ме, където кодът ми се нуждае от корекция.

            canvas.drawBitmap(backgoundImage, 0, 0  , null);

код

    public  Bitmap getAssetImage(Context context, String filename) throws IOException {
AssetManager assets = getApplicationContext().getResources().getAssets();
InputStream buffer = null;
try {
buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;

if (tabletSize) {
Log.i("DragDrop", "am tablet");
} else {
Log.i("DragDrop", "am phone");
options.inSampleSize = 1;
}


Bitmap temp = BitmapFactory.decodeStream(buffer, null, options);
Bitmap finalImage = Bitmap.createScaledBitmap(temp, (int) dWidth, (int) dHeight, true);
temp.recycle();
temp=null;
return finalImage;

}

LogCat

07-07 12:28:14.150: E/AndroidRuntime(7256): FATAL EXCEPTION: Thread-748
07-07 12:28:14.150: E/AndroidRuntime(7256): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@416ec9f0
07-07 12:28:14.150: E/AndroidRuntime(7256): at android.graphics.Canvas.throwIfRecycled(Canvas.java:1026)
07-07 12:28:14.150: E/AndroidRuntime(7256): at android.graphics.Canvas.drawBitmap(Canvas.java:1065)
07-07 12:28:14.150: E/AndroidRuntime(7256): at com.example.funandlearn.DragDrop$MyBringBackSurface.run(DragDrop.java:640)
07-07 12:28:14.150: E/AndroidRuntime(7256): at java.lang.Thread.run(Thread.java:856)

За вашата референтна линия № 640 има код

            canvas.drawBitmap(backgoundImage, 0, 0  , null);

Отговори:

1 за отговор № 1

Вие имате това

    Bitmap temp = BitmapFactory.decodeStream(buffer, null, options);
Bitmap finalImage = Bitmap.createScaledBitmap(temp, (int) dWidth, (int) dHeight, true);
temp.recycle();
temp=null;

Вашият logcat казва

    Canvas: trying to use a recycled bitmap

Трябва да рециклирате растерна карта, когато не се използва.

Цитиране от документите

На Android 2.3.3 (API ниво 10) и по-ниски, се препоръчва използването на рециклиране ().

Трябва да използвате recycle() само когато сте сигурни, че растерната карта вече не се използва. Ако се обадите на recycle () и по-късно се опитате да нарисувате растерната карта, ще получите грешката: "Canvas: опитвате се да използвате рециклирана растерна карта".

Управление на паметта на Android 3.0 и по-висока

Android 3.0 (API ниво 11) представя BitmapFactory.Options.inBitmap област. Ако тази опция е зададена, методите за декодиране, които вземат обекта Опции, ще се опитат да използват повторно съществуваща растерна карта при зареждане на съдържание, Няма нужда да се използва recycle.

Също така проверете това

http://developer.android.com/training/displaying-bitmaps/manage-memory.html