java - 使用 JPanel 时何时创建手动后台缓冲区?

标签 java jpanel bufferedimage double-buffering

我读到 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/

相关文章:

java - 将组件添加到 JFrame 内的 JPanel

java - 在 JPanel 上创建条形图

java - 如何用 ImageIcon 完全填充 JButton 的表面?

java - 将 tiff 转换为缓冲图像 (Java)

java - 如何在弹出窗口/窗口中打开另一个应用程序?

Java-如何使用枚举收集类?

java - 估算java程序在程序结束前的执行时间

java - 在工作线程中阻塞 Java Swing 用户的模式

java - 如何禁用 JPanel 使其无法在 Java 中更改大小

java - 我有两张 Bitmap 格式的图片,我想将一张透明度为 50% 的图片叠加在另一张上