Рисование Android в масштабе Bitmap без ошибки OutOfMemory
Мне нужно масштабировать мое растровое изображение до screenSizeAverage / 3. Когда я делаю это таким образом, иногда возникает ошибка OutOfMemory.
screenWidth = size.x;
screenHeight = size.y;
screenSizeAverage = (screenWidth + screenHeight) / 2;
Bitmap b2 = BitmapFactory.decodeResource(getResources(), R.drawable.logoqrtz);
logoqrtz = Bitmap.createScaledBitmap(b2, screenSizeAverage / 3,screenSizeAverage / 3, true);
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(logoqrtz, (int) (screenWidth / 2, (int) (screenHeight /2), p);
}
Каков наилучший способ сделать это без ошибки OutOfMemory?
1 ответ
private Bitmap setPic() {
// Get the dimensions of the View
int targetW = size.x;
int targetH = size.y;
int size = ((screenWidth + screenHeight) / 2) / 3;
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// Determine how much to scale down the image
int scaleFactor = Math.min(photoW/size, photoH/size);
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
return BitmapFactory.decodeResource(getResources(), R.drawable.logoqrtz, bmOptions);
}
Модифицировано для вашего случая.