0

ビットマップをダウンロードするための 4 行のコードがあります。

URL u = new URL(webaddress);

InputStream in = null;

in = u.openStream();

icon = BitmapFactory.decodeStream(in);

最後の行を変更して、メモリ使用量を減らすために設定サイズのイメージのみをメモリにロードするこのチュートリアルと同様のことを行う予定です。ただし、これに別のサーバー呼び出し/ダウンロードが必要なわけではないので、上記の 4 行のうちどれが実際にソースからデータをダウンロードするのか知りたいです。

コードの最後の行を上記のチュートリアルの最後の 2 つの関数に変更する予定なので、ダウンロードするデータの量が多いか少ないかを知ることで対処できます (私は 1 つの画像から小さな画像のみをダウンロードしようとしています)。たとえば 5 メガピクセルなど)

これが単純な場合/間違った考え方である場合はお詫び申し上げます。データストリームの経験があまりありません。


編集

これらの 2 つの関数を使用して、上記のコードの最後の行を置き換えます。

image = decodeSampledBitmapFromStram(in, 300,300);

画質は優先事項ではありません。これは、より多くのデータがダウンロードされることを意味しますか?

private 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) {

            // Calculate ratios of height and width to requested height and
            // width
            final int heightRatio = Math.round((float) height
                    / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            // Choose the smallest ratio as inSampleSize value, this will
            // guarantee
            // a final image with both dimensions larger than or equal to the
            // requested height and width.
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }

        return inSampleSize;
    }

    private Bitmap decodeSampledBitmapFromStream(InputStream in, int reqWidth, int reqHeight) {
        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Rect padding = new Rect();
        BitmapFactory.decodeStream(in, padding, options);

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

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeStream(in, padding, options);
    }
4

2 に答える 2