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

好的,我刚刚明白发生了什么。我会发布这个以防它帮助任何人。

原因是我正在使用 bitmapfactoryoptons 和 insamplesize =4。

发生的事情是

例如, inSampleSize == 4 返回的图像是原始宽度/高度的 1/4,像素数的 1/16。任何值 <= 1 都被视为与 1 相同。

正如这里提到的

于 2012-06-30T18:37:24.337 回答
0

图像在 RAM 上占用的内存量与磁盘上的不同。在RAM中,可以通过公式检查图像的内存消耗是pixels*3RGBpixels*4还是ARGB。可以通过 找到像素数width*height。您的图像必须具有 Alpha 通道,如80*100*4 = 32,000. 请注意,这是以字节为单位的,要以 kB 或 MB 为单位,您需要分别将其除以 1024 和 1024*1024。

于 2012-06-30T18:37:20.867 回答