缩放的位图随机不会显示在ImageView

时间:2015-09-23 19:41:38

标签: java android image bitmap imageview

我缩小MediaStore.ACTION_IMAGE_CAPTURE拍摄的照片(试图遵循所有更好的做法)

缩放图像分两步完成:

  1. 将捕获图像的完美样本解码为Bitmap
  2. 旋转并缩放位图以适合我的设备显示大小。
  3. 我真的不明白为什么有时图像在图像视图中完美显示,有时它只是空白!非常感谢任何帮助: - )

    更新:我正在onActivityResult进行所有处理工作。不确定这种奇怪行为背后的原因是什么?

    为了更好地理解这个问题,我正在分享代码的一些关键部分:

    位图工厂选项

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inDither = false;
    options.inPurgeable = true;
    options.inInputShareable = true;
    options.inJustDecodeBounds = false;
    options.inTempStorage = new byte[32 * 1024];
    options.inSampleSize = calculateInSampleSize(imageHeight, imageWidth, screenHeight, screenWidth);
    

    样本量计算

    private int calculateInSampleSize(int imageHeight, int imageWidth, int reqHeight, int reqWidth)
    {
        int inSampleSize = 1;
        if (imageHeight > reqHeight || imageWidth > reqWidth) {
    
            final int halfHeight = imageHeight / 2;
            final int halfWidth = imageWidth / 2;
    
            while ((halfHeight / inSampleSize) > reqHeight
                    && (halfWidth / inSampleSize) > reqWidth) {
                inSampleSize *= 2;
            }
        }
        return inSampleSize;
    }
    

    解码并重新调整位图大小

    image = BitmapFactory.decodeFile(fileName, options);
    Matrix matrix = new Matrix();
    
    float scaleFactor = Math.min(1.0f, Math.max(width / imageWidth, height / imageHeight));
    matrix.postScale(scaleFactor, scaleFactor);
    
    Bitmap tempImage = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, false);
    if( image.isMutable() || (image.getHeight()!=tempImage.getHeight() || image.getWidth()!=tempImage.getWidth()) ) {
        image.recycle();
    }
    
    imageView.setImageBitmap(tempImage);
    

1 个答案:

答案 0 :(得分:0)

我终于弄明白了,问题是整个布局正在onResume()中重绘,所以ImageView被重置了。我调用了相同的方法,我在onResume()而不是onActivityResult()方法中将此位图设置为imageview,最终能够使其工作。