我读到 JPanel
有一个双缓冲系统,但我也看到人们使用 BufferedImage
手动创建自己的后台缓冲区,这允许用户在实际渲染之前添加到图像。
JPanel 双缓冲如何工作?如果 JPanel
已经具有双缓冲,为什么有人会创建自己的后台缓冲区?需要/推荐使用 BufferedImage
作为缓冲区的示例是什么?
最佳答案
据我所知,通常是因为:
- 他们已经加载了一个用作背景图像的图像,并希望在其之上进行绘制(他们可能只绘制该图像,使其为 future 的渲染进行硬件加速,同时使用相同的 Graphics 对象绘制其他所有内容用于调用drawImage)
- 因为他们希望有一种简单的方法可以在面板大小调整时缩放图形 drawImage(Image, 0, 0, panelWidth, panelHeight, ImageObserver)并且不希望根据面板的当前尺寸计算图形的动态绘图坐标(尽管这会导致图形外观不太好,并且如果每次调整大小时未缓存缩放图像,则可能会出现性能问题)以及)。
- 因为它是 Swing 双缓冲之前的旧代码,或者人们遵循旧书中的代码。
当所有相关的绘制方法完成时,您在双缓冲绘制方法(如paintComponent(Graphics))中绘制的图形将立即全部可见。在这种情况下,没有理由使用 BufferedImage 作为手动确保所有图形立即显示的方法。
关于java - 使用 JPanel 时何时创建手动后台缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002579/