gpt4 book ai didi

java - 在 JFrame 上绘制 BufferedImage 并写入文件

转载 作者:行者123 更新时间:2023-11-30 04:42:19 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,将图像读入 BufferedImage,将其绘制在 JFrame 上,在其中绘制圆圈,然后将其写入文件。

以下代码将完成除保存文件的内容之外的所有操作。保存的图像仅包含未更改的 BufferedImage。没有圆圈;)我已经尝试通过更改和添加一些代码来解决这个问题,但这并没有多大帮助。

public class PaintImage extends Component {

BufferedImage img;
private int pngWidth, pngHeight;

public int getPngWidth() {
return pngWidth;
}

public int getPngHeight() {
return pngHeight;
}

public void paint(Graphics g) {
super.paint(g);

//g = img.createGraphics();
g.drawImage(img, 0, 0, 809, 1080, null);
g.drawOval(33, 33, 444, 444);
}

public PaintImage() {
try {
img = ImageIO.read(new File("C:\\karte_vorlage.png"));
pngWidth = img.getWidth();
pngHeight = img.getHeight();

} catch (IOException e) {
}
}

public void writeImage () {
try {
img.getGraphics();
ImageIO.write(img, "png", new File("C:\\save.png"));
} catch (IOException e1) {
e1.printStackTrace();
}
}


}

取消注释 g = img.createGraphics();导致图像扭曲。

请帮助我。提前谢谢大家。

编辑:1.调用方法paint(Graphics g)两次。如果最小化,它将再次调用两次。

最佳答案

您可以简单地将组件直接绘制到 BufferedImage

BufferedImage tempImage = new BufferedImage(imagePane.getWidth(), imagePane.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = tempImage.createGraphics();

imagePane.printAll(g);

ImageIO.write(tempImage, "png", new File("C:\\save.png"));

您可能想调整宽度和高度以更好地满足您的要求

已更新

继续思考这个问题。

另一个想法是创建某种“绘制管理器”或“可绘制”界面,给定的图形内容可以自行绘制(显然您想了解更多信息,就像宽度高度)

这意味着它在哪里绘制并不重要。

另一件事是您可能想向渲染器提供有关如何绘制可绘制的提示(例如首选尺寸)

只是一个想法

关于java - 在 JFrame 上绘制 BufferedImage 并写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com