首頁  >  文章  >  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 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn