【问题标题】:How would I use BitSet and a BufferedImage to quickly set pixels?如何使用 BitSet 和 BufferedImage 快速设置像素?
【发布时间】:2015-12-10 00:52:26
【问题描述】:

问题 我正在尝试从头开始制作一个更高效的渲染系统,我得出的结论是,对于较大的窗口,使用 for 循环非常低效。

问题 所以我的问题是,我可以使用 BitSet 来操作像素,而不是使用 for 循环单独设置每个像素吗?

您可能需要的东西 渲染系统非常小,因为它更像是一个测试。它目前唯一做的就是在屏幕上绘制矩形,这样我就可以测试我得到的 FPS。

public void drawRect(int offX, int offY, int width, int height, int color)
{
    for (int y = 0; y < height; y++)
        for (int x = 0; x < width; x++)
            pixels[x + offX + this.width * (y + offY)] = color;
}

像素数组只是来自使用pixels = ((DataBufferInt) engine.getWindow().getImage().getRaster().getDataBuffer()).getData();的 BufferedImage 的数据

我不确定如何将 BitSet 类与像素一起使用,但我希望它比 drawRect 方法更快。 FPS 计数器告诉我,在 1980x1080 的屏幕上绘制一个矩形大约是 100-130 fps,但还没有一致的清除。

感谢任何帮助,如果我的想法很愚蠢,请告诉我

【问题讨论】:

  • 为什么你认为使用BitSet 是个好主意?

标签: java bufferedimage pixels bitset


【解决方案1】:

BitSet 并不能真正用于此目的。 BitSet 就像一个快速、紧凑的boolean[]您可以通过用Arrays.fill(pixels, offX + this.width * (y + offY), offX + width + this.width * (y + offY)) 替换内部循环来取得一些进展。

话虽如此,如果您的目标是提高效率,您应该使用 Java 内置的工具,这些工具比您编写的任何东西都要好。

【讨论】:

  • 我想从头开始制作基于像素的引擎,但无论如何感谢您的建议:)
  • 除非 Arrays.fill 被内部函数替换,否则它只是一个 for 循环。额外的方法调用和边界检查可能使它比普通循环慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2015-11-14
相关资源
最近更新 更多