在用Java完全绘制之前绘制到JPanel的BufferedImage



我找不到任何答案。我正在尝试在 Java 中循环使用主动绘画。我创建了一个新BufferedImage,并在我的绘画方法中获取其图形,绘制到其图形正常Image以及各种形状,例如fillRect() etc.然后将BufferedImage绘制到JPanel(带有变量名称画布)图形。

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 中看到所有绘制的形状但没有图像,这只会延迟,我认为首先将所有内容都绘制到 BufferedImage 上,然后立即绘制在另一个图形上(这不是缓冲区的内容吗?有人可以向我解释一下吗?什么线程应该在图形对象上绘制内容?此图像绘图在其中运行(使用活动渲染时,不调用paintComponent())

什么线程应该在图形对象上绘制内容?

您想要的任何线程。不久前,我编写了一个GIS应用程序,我必须执行此类操作(绘制图像和形状并显示它们)。以下是我的做法:

  1. 有一个背景线程,将图像和所有形状绘制到BufferedImage
  2. 在您的JPanel.paintComponent()从后台线程获取结果并将其绘制到JPanel的图形中

运行这段代码

canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);

paintComponent之外确实是一个坏主意,可能会解释您遇到的问题。这是由于您从canvas.getGraphics()获得的图形不是用于渲染,而仅用于打印等操作

您绝对应该以JPanel.paintComponent()方法绘制BufferedImage,这将解决您的很多问题

相关内容

  • 没有找到相关文章

最新更新