Java Android中的位图大小与ADB大小
我搜索过这个,发现对于小于12的api,通常使用的是bitmap.getrowbytes*bitmap.getheight 但是,对于图像,我获得以下信息:Java Android中的位图大小与ADB大小,java,android,image,Java,Android,Image,我搜索过这个,发现对于小于12的api,通常使用的是bitmap.getrowbytes*bitmap.getheight 但是,对于图像,我获得以下信息: mBitmap.getRowBytes() = 320 mBitmap.getHeight() = 100 mBitmap.getWidth() = 80. 因此,根据上面的公式,我得到32000 但是,当我检查文件时,我正在使用从adb读取位图图像 ls -l 我知道大小是90Kb 我阅读的图片如下: Uri chos
mBitmap.getRowBytes() = 320
mBitmap.getHeight() = 100
mBitmap.getWidth() = 80.
因此,根据上面的公式,我得到32000
但是,当我检查文件时,我正在使用从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();
}
}
为什么结果不同?谢谢。映像在RAM上的内存量与磁盘上的内存量不同。在RAM中,如果图像是RGB,则可以通过公式
像素*3
检查图像的内存消耗,如果图像是ARGB,则通过公式像素*4
检查图像的内存消耗。像素数可以通过宽度*高度找到。您的图像必须具有alpha通道,如80*100*4=32000
。请注意,这是以字节为单位的,要以kB或MB为单位,您需要分别将其除以1024和1024*1024。好的,我刚刚理解了发生的事情。我会发布这个,以防它对任何人都有帮助
原因是我使用的是bitmapfactoryoptons和insamplesize=4
发生的是
例如,inSampleSize==4返回的图像的宽度/高度为原始图像的1/4,像素数为1/16。任何价值