1

我正在使用以下代码从图库中加载一些位图:

 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?(直接加载缩小的图像)如何进一步修改上述编码?

4

2 回答 2

0

如果您没有透明度,可能值得尝试 RGB_565 而不是 ARGB_8888。

于 2013-02-03T15:57:23.797 回答
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);
于 2013-02-13T04:33:22.727 回答