0

好的,有人帮我解决这个问题。我正在使用其他线程和 android 教程推荐的 Bitmap.options 来计算 inSample 大小。以下代码导致空位图而不是缩放位图的问题

    private int determineCorrectScale(InputStream imageStream){

        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(imageStream, null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 100;

        // Find the correct scale value. It should be the power of 2.
        int scale = 1;
        while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE) {
            scale *= 2;
        }

        return scale;

    }
    private String saveScaledBitmapToPhone(Uri imagUri){

        InputStream imageStream;
        try {
            imageStream = getContentResolver().openInputStream(imagUri);

            int scale= determineCorrectScale(imageStream);

            BitmapFactory.Options options=new BitmapFactory.Options();
            options.inSampleSize = scale;

            Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );

.
.
.
.
        } catch (Exception e) {
            return imagUri.toString(); //default

        }
}

yourSelectedImage 为空的问题。但是,如果我注释掉该行

  int scale= determineCorrectScale(imageStream);

并将 insampleSize 设置为 8 或 16 或任何其他固定的手动数字,然后一切正常。任何人都可以解释这种行为或如何解决它?我的感觉说这是由于创建了两个静态类的 Options 对象,但这只是一个猜测。我仍然无法修复它:(请帮助

4

1 回答 1

2

您正在重用相同的数据流。要么重置它,将数据缓存在字节数组中,要么打开一个新流。

于 2013-02-27T08:34:08.553 回答