ホームページ  >  記事  >  Java  >  Graphics2D が BufferedImage を効果的に再スケールしないのはなぜですか?

Graphics2D が BufferedImage を効果的に再スケールしないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 06:55:16582ブラウズ

Why Doesn't Graphics2D Effectively Rescale a BufferedImage?

BufferedImage の再スケーリング

質問:

JavaDocs に準拠しているにもかかわらず、Graphics2D を使用して BufferedImage をスケーリングしようとする試みは証明されています。無駄です。次のコードが使用されます:

BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();

回答:

この問題は、実際のレンダリングを変更せずに画面上のレンダリングのみを拡大縮小する Graphics2D を単独で使用することで発生する可能性があります。画像データ。画像を効果的に再スケーリングするには、補間タイプをさらに制御できる AffineTransformOp を使用することをお勧めします。 AffineTransformOp を使用してコードを変更する方法は次のとおりです。

BufferedImage before = getBufferedImage(encoded);
int w = before.getWidth();
int h = before.getHeight();
BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
after = scaleOp.filter(before, after);

このアプローチにより、双線形補間が可能になり、スムーズで正確な再スケーリング結果が生成されます。

以上がGraphics2D が BufferedImage を効果的に再スケールしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。