2013年2月10日日曜日

BitmapFactory.Options inSampleSize

BitmapFactory.Options inSampleSize

私は、inSampleSizeに3を代入すれば、(Bitmapの大きさが)3分の1になるものと思い込んでいました。しかし、挙動が変なので、調べてみたのです。

BitmapFactory.Options inSampleSizeに関しては、次のサイトで動作検証がなされています。
BitmapFactory.Options inSampleSize の性能テストとか動作とか
貴重なデータを公開して頂きありがとうございます。手間が省けました。
上記サイトでの検証結果では、inSampleSizeに3を代入しても(Bitmapの大きさが)2分の1になってしまうのです。むむむ!

検証結果からすると、inSampleSizeに関して次のように解釈できます。
inSampleSizeを用いて縮小する場合、inSampleSizeに代入されている値の小さい方の直近の「2の累乗の倍数」で縮小される。
例えば、inSampleSizeに10を代入したとしても、(10分の1になるのではなく)8分の1に縮小されるのです。

念のため、inSampleSizeに関する留意点を書いておきます。

  1. inSampleSizeに関する仕掛けは、メモリの節約を目的としている。
  2. inSampleSizeには、縮小する倍率を代入する。例えば、2分の1に縮小したい場合には2を代入する。
  3. inSampleSizeは、int型であるため(float型では無いという意味で)大雑把な縮小しかできない。
  4. inSampleSizeは、上記の検証結果のとおり、大雑把な縮小しかできない。
  5. (inSampleSizeを使って作成された)この大雑把に縮小されたBitmapに対して、必要に応じて、本来目的としていたサイズに(更に微調整して)縮小する。
  6. 縮小する大きさが2分の1よりも大きい場合(例えば、3分の2の大きさに縮小したい場合)、inSampleSizeに関する仕掛けを使うことに意味は無い。この場合、別の仕掛けで縮小する。



0 件のコメント:

コメントを投稿