web-dev-qa-db-ja.com

MAT(Eclipse Memory Analyzer)-メモリダンプからビットマップを表示する方法

私のメモリ使用量を分析していますAndroidアプリを使用して Eclipse Memory Analyzer (MATとも呼ばれます)。時々、Android.graphics.Bitmapクラスの奇妙なインスタンスを見つけて、ヒープの大部分。問題は、このビットマップのソースが見つからないことです。filename、noresourceID、何もありません。ビットマップについて私が見つけることができるすべての情報は次のとおりです: bitmap_info

画像ピクセルの配列を持つフィールドmBufferがあると思います。しかし、それはいくつかの内部Android=形式であり、PNGではありません。

質問:このビットマップで表される画像をメモリダンプから表示するにはどうすればよいですか?

48
HitOdessit

私はそのようなビットマップを表示する方法を見つけました:

  • まず、ダウンロードしてインストールする必要があります [〜#〜] gimp [〜#〜]
  • 次に、MATでBitmapオブジェクトを見つけ、mBufferフィールドを右クリックして、ポップアップメニューで "Copy"->「値をファイルに保存」メニュー項目とこの配列の値をファイルに保存
  • 拡張子を与える.dataをそのファイルに
  • gIMPを起動し、「ファイル」->「開く」を選択し、選択しますきみの .dataファイルをクリックし、開くボタンをクリックします
  • 「生データから画像を読み込む」ダイアログが表示されます。ここでは、ビットマップに正しいパラメータを設定する必要があります
  • 最初に、「画像タイプ」「RGBアルファ」(ほとんどAndroidリソースにはこの画像タイプがありますが、他の画像タイプを試す必要があるかもしれません)
  • 次に、ビットマップに正しいWidthHeightを設定します(正しい寸法はメモリダンプにあります)

その時点で、元の画像のプレビューをすでに観察しているはずです。変更していない場合は、「ローデータからイメージをロード」ダイアログで他のパラメーターを変更してみてください。

注:画像の幅と高さを取得するには、問題の画像に示すように、属性セクションのMATのmWidthおよびmHeightフィールドを確認できます。

123
HitOdessit

コマンドラインで ImageMagick を使用して、メモリダンプをMATからpngに変換できます。

関連するMATオブジェクトのBitmapmBufferフィールドを右クリックして[コピー]-> [ファイルに値を保存]を選択し、.rgba拡張子を付けてファイルに名前を付けます。

mWidthおよびmHeightフィールドのビットマップの幅と高さをメモする必要があります。これらは、Bitmapオブジェクトで確認できます。

ImageMagickコマンドラインツールがインストールされている場合(Ubuntu apt-get install imagemagickの場合)、次のパラメーターを指定してconvertコマンドを発行します。

convert -size 'width'x'height' -depth 8 filename.rgba filename.png

例えば

 convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png

生成されたpngファイルは、Ubuntueog phone_decor.rgbaのように eog で簡単に確認できます。

6
auselen