あなたはそれを正しくやっています!
値が有効かどうかを確認する簡単な方法は、次のようにログに記録することです。
int numBytesByRow = bitmap.getRowBytes() * bitmap.getHeight();
int numBytesByCount = bitmap.getByteCount();
Log.v( TAG, "numBytesByRow=" + numBytesByRow );
Log.v( TAG, "numBytesByCount=" + numBytesByCount );
これにより、次の結果が得られます。
03-29 17:31:10.493: V/ImageCache(19704): numBytesByRow=270000
03-29 17:31:10.493: V/ImageCache(19704): numBytesByCount=270000
したがって、どちらも同じ数値を計算しています。これは、ビットマップのメモリ内サイズであると思われます。これは完全に圧縮されていないため、ディスク上のJPGまたはPNG とは異なります。
詳細については、AOSP とサンプル プロジェクトのソースを参照してください。これは、Android デベロッパー ドキュメントのサンプル プロジェクトBitmapFunで使用されているファイルです。
AOSP ImageCache.java
/**
* 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();
}
ご覧のとおり、これは彼らが使用するのと同じテクニックです
bitmap.getRowBytes() * bitmap.getHeight();
参考文献: