- - PR -
画像の縮小について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-30 19:45
現在、画像(JPEG)を縮小するプログラムを作っています。
private BufferedImage readShrinkImage(ImageReader reader, double power) { BufferedImage shrinkImage = null; try { BufferedImage image = reader.read(0); shrinkImage = new BufferedImage((int)(image.getWidth()*power), (int)(image.getHeight()*power), image.getType()); AffineTransformOp atOp = new AffineTransformOp( AffineTransform.getScaleInstance(power, power), AffineTransformOp.TYPE_BILINEAR); atOp.filter(image, shrinkImage); } catch (IOException ex) { ex.printStackTrace(); } return shrinkImage; } 上記のようなメソッドを作って、画像(800x600)を縮小したところ、大きさが元画像の40%以上縮小すると、ジャギが非常に目立ってしまい満足する結果が得られませんでした。 そこで、画像のスケーリング性能の高いライブラリ、または手法を探していますが、よいものをご存知ではないでしょうか。 この後、JAI を試してみようと思いますが、すでにご使用になられた方の意見を聞いてみたいです。 よろしくご教示お願いいたします。 [ メッセージ編集済み 編集者: おちゃ 編集日時 2005-03-30 19:47 ] | ||||
|
投稿日時: 2005-03-31 00:32
Java2Dに描画の品質を変えれる機能があります。
Graphics2D.addRenderingHints(Map hints) RenderingHints.KEY_RENDERING RenderingHints.VALUE_RENDER_QUALITY ひょっとしたら、プラットフォームやバージョンで違うかもしれませんが、 Windows,Java1.4ではいけてます。 | ||||
|
投稿日時: 2005-03-31 22:59
a-sanさんありがとうございます。
private BufferedImage readShrinkImage(ImageReader reader, double power) { BufferedImage shrinkImage = null; try { BufferedImage image = reader.read(0); shrinkImage = new BufferedImage((int)(image.getWidth()*power), (int)(image.getHeight()*power), image.getType()); HashMap hints = new HashMap(); hints.clear(); hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); hints.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); hints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); hints.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); AffineTransformOp atOp = new AffineTransformOp( AffineTransform.getScaleInstance(power, power), new RenderingHints(hints) ); atOp.filter(image, shrinkImage); } catch (IOException ex) { ex.printStackTrace(); } return shrinkImage; } こんな感じに変更してみましたが、画質が上がっている様子が見られませんでした。 どこか間違ってしまったのでしょうか…。 引き続き皆様のご教示、お願い申し上げます。 | ||||
|
投稿日時: 2005-03-31 23:24
ジャギが問題なら、BILINEAR を BICUBIC にするだけで改善しませんか? | ||||
|
投稿日時: 2005-04-01 13:26
holicさん、ありがとうございます。
BICUBICも試してみましたが、まったく変化がありません。 その他のパラメータも、変更してみたのですが、まったく画質が変わりません。 なにか、根本的に間違っているのでしょうか?? | ||||
|
投稿日時: 2005-04-01 16:27
以下で試してみてください。
[ メッセージ編集済み 編集者: a-san 編集日時 2005-04-01 16:30 ] | ||||
|
投稿日時: 2005-04-02 19:34
a-sanさん、サンプルコードありがとうございます。
ご提供いただいたサンプルコードをそのままコンパイルし、実行してみたのですが 望んでいたクオリティの縮小画像を得ることができませんでした。(私の作ったプログラムと同程度) Windows の GDI+ 程度のクオリティを求めているのですが、標準のAPIのみでは難しいのでしょうか・・・ | ||||
|
投稿日時: 2005-04-02 19:54
ちなみに実行環境は
Windows XP SP2 J2SDK 1.4.2_6 です。 |
1|2|3
次のページへ»