問題:
儘管遵守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中文網其他相關文章!