我知道我可以用这些方法来获取Bitmap的大小:
bitmap.getAllocationByteCount(); //API 19
bitmap.getByteCount(); //API 12
bitmap.getRowBytes() * bitmap.getHeight(); //earlier version
但是这一切都需要一个Bitmap对象,这意味着我需要先将位图解码到内存中,这可能是OOM
例外情况。所以我在获取Bitmap对象之前使用这种方式来获取大小:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(bitmapPath, options);
int picWidth = options.outWidth;
int picHeight = options.outHeight;
int size = 4 * picHeight * picWidth; //Byte
我认为它的每像素成本为32位,因为Android解码位图使用RGB_8888默认值。
这是正确的方法还是有更好的方法来做到这一点?
答案 0 :(得分:1)
您可以使用BitmapFactory.Options.inPreferredConfig选择位图配置。这将允许您指定一个配置,您可以确定Bitmap将占用每个像素的字节数。我相信RGB_8888是默认值。
您可能无法100%可靠地阻止位图解码上的OOM,因为您无法保证内存中的一定量连续可用空间用于分配位图。但您当然可以调整样本大小和配置以减少负载。
答案 1 :(得分:-1)
只需使用Bitmap的路径创建一个File对象。然后获取file.length()以获取文件大小。
e.g。文件位图=新文件(pathToBitmap);
bitmap.length();
您必须根据需要添加try / catch子句。