私ができる提案は、最初に画像のサイズを別のに変更することBufferedImage
です。その理由は、より高品質のスケーリングされた画像を生成するために、のGraphics2D
オブジェクトをBufferedImage
取得できるためです。
Graphics2D
オブジェクトによる画像処理の実行方法を指示する「レンダリングヒント」を受け入れることができGraphics2D
ます。このsetRenderingHint
メソッドは、これらのレンダリングヒントを設定するために使用できるメソッドの1つです。クラスのレンダリングヒントをRenderingHints
使用できます。
次に、そのGraphics2D
オブジェクトを使用しBufferedImage
て、前に指定したレンダリングヒントを使用して画像を描画できます。
大まかな(テストされていない)コードは次のように機能します。
BufferedImage scaledImage = new BufferedImage(
scaledWidth,
scaledHeight,
BufferedImage.TYPE_INT_RGB
);
Graphics2D g = scaledImage.createGraphics();
g.setRenderingHints(
RenderingHints.Key.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC
);
g.drawImage(panelImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
関心のある他のレンダリングのヒントには、次のものがあります。
Javaチュートリアルの「レンダリング品質の制御」セクションには、Graphics2D
オブジェクトのレンダリング品質を制御する方法に関する詳細情報もあります。
また、一般的なグラフィカルインターフェイスの扱いに関する非常に優れた情報源として、ChetHaaseとRomainGuyによるFilthyRichClientsを強くお勧めします。この本には、画像のスケーリングの問題を扱っているセクションが1つありますが、これは非常に関連性が高いようです。