1

我读过它JPanel有一个双缓冲系统,但我也看到人们使用 手动创建自己的后台缓冲区BufferedImage,这允许用户在实际渲染之前添加到图像中。

JPanelJPanel 双缓冲是如何工作的,如果已经有双缓冲,为什么还要创建自己的后台缓冲区?BufferedImage什么是需要/推荐您的缓冲区的时间示例?

4

1 回答 1

0

据我所见,这通常是因为:

  • 他们已经在加载一个用作背景图像的图像并希望在其上进行绘制(他们可能只绘制图像,将其留给硬件加速以供将来渲染,同时使用用于调用的相同 Graphics 对象绘制其他所有内容绘制图像)
  • 因为他们希望有一种简单的方法来缩放他们的图形,因为他们的面板使用 drawImage(Image, 0, 0, panelWidth, panelHeight, ImageObserver)调整大小,并且不希望做额外的工作来计算基于图形的动态绘图坐标在面板的当前尺寸上(尽管这会导致图形看起来不太好看,并且如果每次调整大小时未缓存缩放的图像,也可能存在性能问题)。
  • 因为它是 Swing 双缓冲之前的旧代码,或者人们遵循旧书中的代码。

当所有相关的绘画方法都完成后,您在双缓冲绘画方法(如paintComponent(Graphics))中绘制的图形将立即全部可见。在这种情况下,没有理由使用 BufferedImage 作为手动确保所有图形一次显示的方式。

于 2014-07-28T19:48:08.523 回答