图像变得无法辨认

时间:2014-12-04 07:18:55

标签: android image bitmap

我的应用程序执行的步骤: -

  1. 下载大量图片并将其保存在SD卡上。
  2. 将每个图像加载到位图并调整大小后,调整大小后用原始图像替换此调整大小的图像。
  3. 我的代码: -

    Bitmap myimage = loadimage(path+temppos+".jpg");
    Bitmap finalimage = getResizedBitmap(myimage,width,height);
    //save image 
    .....
    //recyclebitmap 
    myimage.recycle();
    finalimage.recycle();
    

    的LoadImage: -

    public Bitmap loadimage(String path)
        {
    
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.RGB_565;
            options.inDither=true;
            options.inPurgeable=true;
            options.inInputShareable=true;
            return BitmapFactory.decodeFile(path, options);
        }
    

    现在我'在gridview上填充这些图像。

    输出(前): - enter image description here

    输出(后): - enter image description here

    Before最初对应的地方,只下载了几张图片。 并且After对应于下载所有图像后。

    现在,我认为这可能是因为Bitmap.recycle()方法,但不知道原因。如果我错了请纠正我,并在这里指出错误。

    编辑:我必须添加网格视图,显示大约50个下载的图像,但只有前三个图像变得无法识别。

    感谢。

1 个答案:

答案 0 :(得分:0)

要获得调整后的位图,您可以使用以下代码:(取自this教程)

public static Bitmap decodeSampledBitmapFromPath(String path, int reqWidth,
            int reqHeight) {

        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        options.inSampleSize = calculateInSampleSize(options, reqWidth,
                reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        Bitmap bmp = BitmapFactory.decodeFile(path, options);
        return bmp;
        }

    public static int calculateInSampleSize(BitmapFactory.Options options,
            int reqWidth, int reqHeight) {

        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {
            if (width > height) {
                inSampleSize = Math.round((float) height / (float) reqHeight);
            } else {
                inSampleSize = Math.round((float) width / (float) reqWidth);
             }
         }
         return inSampleSize;
        }

您还可以查看official site以获取有关加载位图的提示

修改

尝试将位图配置更改为ARGB_8888以获得最佳质量

因为RGB_565配置会产生轻微的视觉瑕疵,具体取决于源的配置(取自docs

<强>更新

我认为您可以查看this answer,我认为这可以解决您的问题