我找不到任何答案。我正在尝试在 Java 中循环使用主动绘画。我创建一个新的 BufferedImage 并在我的绘制方法中获取其图形,绘制到其图形正常的 Image 以及各种形状,如 fillRect() 等。 > 然后,我将 BufferedImage
绘制到 JPanel
(使用变量名称 canvas)图形。
Graphics gr = buffer.createGraphics();
gr.drawImage(img, 0, 0, 500, 500, null);
for (int i = 0; i<200; i++){
gr.drawOval(i*10,i*20,50,50);
etc.
}
gr.dispose();
canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);
为什么我在 JPanel 中看到绘制的所有形状,但没有 Image ,这只是有延迟我认为首先所有内容都绘制到 BufferedImage ,然后立即绘制在另一个图形上(这不是缓冲区的意思吗?) 。有人可以向我解释一下吗?什么线程应该在图形对象上绘制东西?此图像绘制在哪个中运行(使用主动渲染时,不调用paintComponent())
最佳答案
What thread is supposed to draw stuff on graphics object?
任何你想要的话题。我不久前编写了一个 GIS 应用程序,必须执行此类操作(绘制图像和形状并显示它们)。以下是我的操作方法:
- 有一个后台线程将图像和所有形状绘制到
BufferedImage
- 在
JPanel.paintComponent()
中从后台线程获取结果并将其绘制到 JPanel 的图形中
运行这段代码
canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);
在 paintComponent
之外确实是一个坏主意,可能会解释您遇到的问题。这是因为从 canvas.getGraphics()
获取的图形并不用于渲染,而仅用于打印等操作
您绝对应该在 JPanel.paintComponent()
方法中绘制 BufferedImage
,这将解决您的很多问题
关于java - BufferedImage 在 Java 中完全绘制之前绘制到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251895/