Arc*_*pgc 20 android getimagesize
当我在将图像保存到SD卡之前搜索如何找到图像的大小时,我发现了这个:
bitmap.getByteCount();
Run Code Online (Sandbox Code Playgroud)
但是这个方法是在API 12中添加的,我正在使用API 10.所以我再次发现了这个:
getByteCount()只是一种方便的方法,它完全按照你在else块中的方式执行.换句话说,如果您只是重写getSizeInBytes以始终返回"bitmap.getRowBytes()*bitmap.getHeight()"
这里:
所以,通过计算,bitmap.getRowBytes() * bitmap.getHeight()我得到了价值120000 (117 KB).
SD卡上的图像尺寸在哪里1.6 KB.
我错过了什么?或做错了?
谢谢
pjc*_*jco 32
确定值是否有效的快速方法是将其记录为:
int numBytesByRow = bitmap.getRowBytes() * bitmap.getHeight();
int numBytesByCount = bitmap.getByteCount();
Log.v( TAG, "numBytesByRow=" + numBytesByRow );
Log.v( TAG, "numBytesByCount=" + numBytesByCount );
Run Code Online (Sandbox Code Playgroud)
这给出了结果:
03-29 17:31:10.493: V/ImageCache(19704): numBytesByRow=270000
03-29 17:31:10.493: V/ImageCache(19704): numBytesByCount=270000
Run Code Online (Sandbox Code Playgroud)
所以两者都在计算相同的数字,我怀疑是位图的内存大小. 这与磁盘上的JPG或PNG不同,因为它完全未压缩.
有关更多信息,我们可以查看AOSP和示例项目中的源代码.这是Android开发人员文档缓存位图中示例项目BitmapFun中使用的文件
/**
* Get the size in bytes of a bitmap in a BitmapDrawable.
* @param value
* @return size in bytes
*/
@TargetApi(12)
public static int getBitmapSize(BitmapDrawable value) {
Bitmap bitmap = value.getBitmap();
if (APIUtil.hasHoneycombMR1()) {
return bitmap.getByteCount();
}
// Pre HC-MR1
return bitmap.getRowBytes() * bitmap.getHeight();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这与他们使用的技术相同
bitmap.getRowBytes() * bitmap.getHeight();
Run Code Online (Sandbox Code Playgroud)
参考文献:
现在我使用这个:
ByteArrayOutputStream bao = new ByteArrayOutputStream();
my_bitmap.compress(Bitmap.CompressFormat.PNG, 100, bao);
byte[] ba = bao.toByteArray();
int size = ba.length;
Run Code Online (Sandbox Code Playgroud)
获得总大小的字节数.因为我在这里获得的值与SD卡上图像的大小(以字节为单位)完全匹配.
| 归档时间: |
|
| 查看次数: |
12432 次 |
| 最近记录: |