我有高分辨率图像的问题。
我对 1280x720 图像使用 nodpi-drawable 文件夹,并使用此代码对其进行缩放。
public static Drawable scaleDrawable(Drawable d, int width, Activity cxt)
{
BitmapDrawable bd = (BitmapDrawable)d;
double oldWidth = bd.getBitmap().getWidth();
double scaleFactor = width / oldWidth;
int newHeight = (int) (d.getIntrinsicHeight() * scaleFactor);
int newWidth = (int) (oldWidth * scaleFactor);
Drawable drawable = new BitmapDrawable(cxt.getResources(),MainScreen.getResizedBitmap(bd.getBitmap(),newHeight,newWidth));
BitmapDrawable bd2 = (BitmapDrawable)drawable;
return drawable;
}
public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
return resizedBitmap;
}
我使用该代码将图像缩放到屏幕宽度,因此如果屏幕为 320x480,图像将缩放到 320 并保持比例,我不在乎图像是否从底部离开屏幕。
一切正常,但在 xhdpi 设备上尝试时,特别是三星 Galaxy Note 2,屏幕正好为 720x1280。
它在行中出现 Out Of Memory Exception 崩溃:
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
我不明白为什么,图像应该从 720 缩放到 720,但我的代码必须是非常糟糕的优化或什么的。
我还没有尝试过 1080x1920 的设备,但它似乎也会崩溃。
有人在查看代码时会看到不好的东西吗?