为什么decodeStream在派生options.inSampleSize而不是set时返回null

时间:2013-02-27 06:43:37

标签: android

好的,有人帮我解决这个问题。我正在使用其他线程和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为null的问题。但是,如果我注释掉该行

  int scale= determineCorrectScale(imageStream);

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

1 个答案:

答案 0 :(得分:2)

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