48

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

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

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

4

2 に答える 2

124

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

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

その時点で、元の画像のプレビューがすでに表示されているはずです。そうでない場合は、 [生データから画像を読み込む] ダイアログで他のパラメータを変更してみてください。

注: 画像の幅と高さを取得するには、問題の画像に示すようにmWidthmHeight属性セクションの MAT のフィールドを参照してください。

于 2012-10-03T13:32:08.563 に答える
6

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

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

Bitmap オブジェクトで確認できるフィールドのビットマップの幅mWidthと高さに注意する必要があります。mHeight

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 ファイルは、eogなどeog phone_decor.rgbaUbuntu簡単に確認できます。

于 2013-09-09T07:08:04.783 に答える