我使用以下代码从库中加载一些位图:
bitmap = (BitmapFactory.decodeFile(picturePath)).copy(Bitmap.Config.ARGB_8888, true);
bitmap = Bitmap.createScaledBitmap(bitmap, screenWidth, screenHeight, true);
bitmapCanvas = new Canvas(bitmap);
invalidate(); // refresh the screen
问题:
通过首先完全解码并复制,然后进行缩放以适应屏幕宽度和高度,似乎需要很长时间来加载图像。它实际上并不需要以全密度加载图片,因为我不会让用户放大导入的图像。
这样,有没有减少加载时间和RAM的方法? (直接加载缩小的图像)如何进一步修改上面的编码?
答案 0 :(得分:0)
如果您没有透明度,可能值得尝试使用RGB_565而不是ARGB_8888。
答案 1 :(得分:0)
刚刚找到了减少RAM和加载时间的答案,并避免了其他类似问题的outofmemory
错误。
//get importing bitmap dimension
Options op = new Options();
op.inJustDecodeBounds = true;
Bitmap pic_to_be_imported = BitmapFactory.decodeFile(picturePath, op);
final int x_pic = op.outWidth;
final int y_pic = op.outHeight;
//The new size we want to scale to
final int IMAGE_MAX_SIZE= (int) Math.max(DrawViewWidth, DrawViewHeight);
int scale = 1;
if (op.outHeight > IMAGE_MAX_SIZE || op.outWidth > IMAGE_MAX_SIZE)
{
scale = (int)Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE /
(double) Math.max(op.outHeight, op.outWidth)) / Math.log(0.5)));
}
final BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
//Import the file using the o2 options: inSampleSized
bitmap = (BitmapFactory.decodeFile(picturePath, o2));
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);