LoginSignup
0
0

More than 5 years have passed since last update.

写真をリサイズするとOOM

Posted at

Titanium.Media.showCamera()を呼び出し、撮影した写真をsuccessコールバックの中で以下のように適当なサイズにリサイズするだけで40Mbyte近く一気にメモリを食ってしまいます(Galaxy S3, Android Debug Monitorで確認)。Galaxy S3上で撮影した写真をリサイズすると2回に一回くらいの割合でOut of memoryの例外(3.2系のコードだと戻り値でnullが返ってくるっぽい)が起きてしまうので困っています。

event.media.imageAsResized(200,200)

TitaniumのJavaのコードを適当に眺めてるときっとここら辺が呼ばれてるんだろうなーと推測。getImage()内のBitmapFactoryの処理あたりで食ってるのかな。

yanzmさんのサイトを見ると、表示する画像に対して、カメラの画像をそのまま読み込むのは非効率(携帯の画面の解像度に対してカメラの画像の解像度が高すぎる)なので、inSampleSizeを使って表示する解像度に近い解像度でメモリ上に読み込むような処理をするとOOMも抑えられて効率的なことが書かれています。上記のTitaniumのコードだとinSampleSizeは指定されていないので、高解像度の画像をそのままメモリに読み込んでガッツリメモリ食っちゃうんですかねぇ。

リサイズするときもinSampleSize使って適当なサイズで読み込んでリサイズするとかできないんですかね。それともリサイズする場合はオリジナルのサイズで読み込まないとだめなんですかね。画像を扱うコードを普段書かない上にAndroidのコードも適当にしか書いてないのでなんとも。。。とりあえずJavaでリサイズ用のサンプルコードでも書いてみようかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0