【问题标题】:When to create a manual back buffer when using JPanel?使用 JPanel 时何时创建手动后台缓冲区?
【发布时间】:2014-07-28 19:13:26
【问题描述】:

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

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

【问题讨论】:

    标签: java jpanel bufferedimage double-buffering


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多