基本
BitmapのリサイズにはBitmap#createScaledBitmap()
を使います。
引数 | 型 | 説明 |
---|---|---|
src | Bitmap | リサイズ対象のBitmap |
dstWidth | int | リサイズ後のBitmap幅 |
dstHeight | int | リサイズ後のBitmap高さ |
filter | boolean | リサイズ時にフィルターを使用するか |
How to use
例えばアスペクト比を保ったままViewに表示できる最大サイズにリサイズを行う場合はこうなります。
// リサイズ前のBitmap
Bitmap beforeResizeBitmap;
// リサイズ比
double resizeScale;
// 横長画像の場合
if (beforeResizeBitmap.getWidth() >= beforeResizeBitmap.getHeight()) {
resizeScale = (double) viewWidth / beforeResizeBitmap.getWidth();
}
// 縦長画像の場合
else {
resizeScale = (double) viewHeight / beforeResizeBitmap.getHeight();
}
// リサイズ
Bitmap afterResizeBitmap = Bitmap.createScaledBitmap(beforeResizeBitmap,
(int) (beforeResizeBitmap.getWidth() * resizeScale),
(int) (beforeResizeBitmap.getHeight() * resizeScale),
true);
filterについて
第四引数のfilterは有効/無効どちらにするかで、場合によってはリサイズ後の画像に大きな違いが出てきます。
実験
以下の画像で縮小表示、拡大表示を行い、それぞれでfilterの有効/無効を試してみます。
縮小
等倍表示
filter有効
filter無効
filter有効/無効のdiff
所感
縮小ではfilterを無効にするとジャギーがはっきりと表れる。
拡大
等倍表示
filter有効
filter無効
filter有効/無効のdiff
所感
拡大においてもfilterを無効にするとジャギーが表れるが、縮小と比べるとジャギー感は小さい。
まとめ的な何か
自分で拡縮を書かないならばfilterは有効にしておいた方が無難っぽい。