2011-08-01 5 views
3

こんにちは、たくさんのビットマップを読み込むときにメモリがクラッシュするのを防ぐためのテストコードです。そして、私は少し疑問を持って、次のコードAndroidでのビットマップメモリ​​管理

Bitmap bmp; 
    long sizepreload, sizepostload,bmppixels; 
    sizepreload= Debug.getNativeHeapAllocatedSize(); 

    bmp=getImageBitmapFromUrl("http://www.google.com/intl/en_com/images/srpr/logo2w.png"); 
    sizepostload=Debug.getNativeHeapAllocatedSize(); 
    bmppixels=bmp.getHeight()*bmp.getWidth(); 
    Log.d("bmp test","pre="+sizepreload+"\n" + 
      "post="+sizepostload+"\n" + 
      "bmppixels="+bmppixels+"\n"+ 
      "ratio="+(sizepostload-sizepreload)/bmppixels 
      ); 

についてそのスニペットのリターンは次のとおりです。

pre=4260464 
post=4333112 
bmppixels=26125 
ratio=2 

ので、ビットマップは、ピクセルあたり2つのバイトを取ります。 1ピクセル当たり16ビットは、すべてのビットマップに対して一定であるか、可変である(画面密度または画質に依存する)。その変数の場合、どのようにBitmapクラスからその比率を得ることができますか? URLからダウンロードするコードのthats事前

感謝:

public static Bitmap getImageBitmapFromUrl(String url){ 
    URL aURL; 
    Bitmap result = null; 
    try { 
     aURL = new URL(url); 
     URLConnection conn = aURL.openConnection(); 
     conn.connect(); 
     InputStream is = conn.getInputStream(); 
     result= BitmapFactory.decodeStream(is); 
     is.close(); 

    } catch (Exception e) { 
     result=null; 
     e.printStackTrace(); 
    } 
    return result; 
} 

答えて

2

ビットマップは、これは、ビットマップの形式に依存し、ピクセル毎に最大4バイトです。画面密度は可変ではありません。しかし、ビットマップを描画するときには、画面密度のためにサイズを変更する必要があり、一時的にヒープに影響します。

+1

:ヒープに影響を与えずにビットマップメモリ​​を消去する方法はここにあります。 – naresh

関連する問題