きれいな画像縮小の方法

2,110 views
Skip to first unread message

Hiroshi ANDO

unread,
Jun 6, 2009, 9:48:28 PM6/6/09
to Android-SDK-Japan
安藤と申します。こんにちは。

現在、簡単な画像ビューワを作成しているのですが、きれいに縮小された画像表示ができないか悩んでいます。

現在の処理は単純で、ZIPから取り出した画像(PNG, JPGなど)を
画面サイズに合わせたサイズに縮小してCanvas.drawBitmapで表示しています。

ただ、画像は表示されるのですが、細い線がスムーズにならず、ギザギザな感じになります。
drawBitmapの引数Paintで描画方法を変更できるのかもしれませんが、
ANTI_ALIAS_FLAGやDITHER_FLAGを指定しても良くなった感じはしません。

きれいな画像縮小の方法をご存知の方がいらっしゃれば、助言を頂きたいです。よろしくお願いいたします。
(自分で平均画素法などの処理を実装する必要あり??)

■ソースコードの概略

-----------
Bitmap bitmap = BitmapFactory.decodeStream(mZip.getInputStream(mZip.getEntry(mZipEntryNames)));
-----------
public void onDraw(Canvas canvas) {
Rect srcRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
Rect dstRect = new Rect(0, 0, (int) (bitmap.getWidth() * ratio), (int) (bitmap.getHeight() * ratio));

canvas.drawBitmap(bitmap, srcRect, dstRect, null);
}
-----------


--
安藤 寛

HideCheck

unread,
Jun 7, 2009, 2:56:54 AM6/7/09
to android-...@googlegroups.com
小林と申します。こんにちは

参考になるか分かりませんが、こちらはどうでしょうか?
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html


2009/06/07 10:48 Hiroshi ANDO <ando.h...@gmail.com>:

Hiroshi ANDO

unread,
Jun 7, 2009, 9:18:50 AM6/7/09
to android-...@googlegroups.com
安藤です。

ありがとうございます。トライしてみます。
(うまくいかなかったら、GLのテクスチャで試してみる予定です)
--
安藤 寛

Hiroshi ANDO

unread,
Jun 13, 2009, 6:40:38 AM6/13/09
to android-...@googlegroups.com
小林さん

安藤です。

> 参考になるか分かりませんが、こちらはどうでしょうか?
> http://www.anddev.org/resize_and_rotate_image_-_example-t621.html

この方法でうまくいきました。

Bitmap.createBitmapで縮小サイズにあったBitmapを作り直し、
canvas.drawBitmapでは、縮小をせずに表示をするようにしました。

ありがとうございました。

-----------
Matrix matrix = new Matrix();
matrix.postScale(ratio, ratio);

Bitmap bitmap = BitmapFactory.decodeStream(mZip.getInputStream(mZip.getEntry(mZipEntryNames)));
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

Rect dstRect = new Rect(0, 0, (int) (bitmap.getWidth() * ratio), (int) (bitmap.getHeight() * ratio));
-----------
public void onDraw(Canvas canvas) {
canvas.drawBitmap(scaledBitmap, dstRect, dstRect, null);
}
-----------
--
安藤 寛

Reply all
Reply to author
Forward
0 new messages