BufferedImage像素Vs Graphics.drawImage

use*_*431 2 java graphics image pixels

使用以下内容制作缓冲图像和绘制像素之间有什么区别:

private BufferedImage img;
private int[] pixels;

pixels = ((DataBufferInt) img.getRaster().getDataBuffer());
Run Code Online (Sandbox Code Playgroud)

而只是使用图像

img
Run Code Online (Sandbox Code Playgroud)

变量并使用img的图形来做:

img.getGraphics().drawImage(/*image*/, x, y, observer);
Run Code Online (Sandbox Code Playgroud)

编辑:

这是为游戏开发!!

Hov*_*els 5

  • 使用getGraphics()提供了一种在图像上绘图的可靠方法,无论其底层结构如何。
  • 请注意,您不应该像您演示的那样通过链接来执行此操作:img.getGraphics().drawImage(/*image*/, x, y, observer);因为这不允许您在使用完 Graphics 对象后对其进行处理,从而面临资源耗尽的风险。
  • 直接操作栅格的位可能是更改事物的更快方法,但我相信如何执行此操作取决于您使用的 BufferedImage 的类型。


mik*_*era 5

通过这些Graphics方法的优点:

  • 使用现成的更高级操作通常更简单drawImage
  • 您可能会受益于某些平台上的硬件加速/优化
  • 它相对独立于底层图像格式工作

下降到像素缓冲级别的优点:

  • 它可用于非常专业的目的,例如从某种公式/计算生成每个像素(例如,我使用此技术生成自定义颜色渐变)
  • 对于单个像素操作,它可以稍微快一些(但对于批量操作可能会更慢,例如,因为您没有获得硬件加速)drawImage

如果它只是屏幕上的常规游戏渲染,我会说Graphics路线可能是最好的.如果您正在做一些像现场图像生成这样的事情,那么像素缓冲路径就值得探索.