java - BufferedImage 在 Java 中完全绘制之前绘制到 JPanel

标签 java animation graphics drawing drawimage

我找不到任何答案。我正在尝试在 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 应用程序,必须执行此类操作(绘制图像和形状并显示它们)。以下是我的操作方法:

  1. 有一个后台线程将图像和所有形状绘制到 BufferedImage
  2. 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/

相关文章:

java -/usr/bin/java : is a directory

java - 将 XML 文件发送到 Android 中的 Web 服务器

java - java和正则表达式中的字符串分割标记=值

java - 限制和卡住按钮不起作用,也不会生成新球(动画)

graphics - opencv默认使用图形卡

c++ - 制作 2D 动画的最佳方式是什么?

javascript - 与矩形中心的线的交点

java - 跳过 Sonar 分析测试

CSS 动画 - 从中​​心增长(从中心点缩放到完整容器)

android - 两个 Activity 之间的动画不起作用