问题:
尽管遵守 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中文网其他相关文章!