0

私はこれを検索しましたが、12未満のAPIの場合、通常使用されるのはbitmap.getrowbytes*bitmap.getheightです。

ただし、画像の場合、次の情報を取得しています。

mBitmap.getRowBytes() = 320
mBitmap.getHeight() = 100
mBitmap.getWidth() = 80.

したがって、上記の式によれば、32,000が得られます。

ただし、adbからビットマップイメージを読み取っているファイルを確認すると、

ls -l

サイズは90Kbだと思います。

私は次のように画像を読んでいます:

        Uri chosenImageUri = data.getData();
        if (chosenImageUri != null) {
            try {
       InputStream photoStream = getContentResolver().openInputStream(chosenImageUri);
          BitmapFactory.Options opts = new BitmapFactory.Options(); 
              opts.inSampleSize = 4;
              Bitmap mBitmap = BitmapFactory.decodeStream(photoStream,null, opts);
          photoStream.close();

} 
}

結果が異なるのはなぜですか?ありがとうございました。

4

2 に答える 2

1

何が起こっているのか理解できました。誰かに役立つ場合に備えて、これを投稿します。

これは、insamplesize=4とともにbitmapfactoryoptonsを使用しているためです。

何が起こるか

たとえば、inSampleSize == 4は、元の画像の幅/高さの1/4、ピクセル数の1/16の画像を返します。1未満の値は1と同じように扱われます。

ここで述べたように

于 2012-06-30T18:37:24.337 に答える
0

イメージがRAMに使用するメモリの量は、ディスク上のメモリの量とは異なります。RAMでは、画像のメモリ消費量は、pixels*3RGBでpixels*4あるかARGBであるかを式で確認できます。ピクセル数は。で見つけることができますwidth*height。画像には、のようにアルファチャネルが必要80*100*4 = 32,000です。これはバイト単位であり、kBまたはMBで取得するには、それぞれ1024および1024*1024で除算する必要があることに注意してください。

于 2012-06-30T18:37:20.867 に答える