我已经开始研究一个程序,我想完全操纵像素被绘制到屏幕的方式。所以我想把像素数据存储在一个int或byte数组中,并且每隔1毫秒绘制一次屏幕上的每个像素,但从过去的经验来看,我知道这是非常低效的,600x550画布的fps低于5 ... 那么,在绘制具有相同像素数的图像时,怎么会发生这种情况呢?这个Graphics方法如何工作?还有更有效的方法吗?
答案 0 :(得分:0)
在内存中向屏幕缓冲区显示图像的过程是通过名为blitting的过程在Java API内部完成的。您使用的图像类型甚至Java版本之间的细节也不同。 Java中的图像可以“加速”,这意味着它们可以是与硬件兼容的图像与实际驻留GPU内存的图像之间的任何内容。如果你实例化BufferedImage
,根据我的经验,它永远不会“加速”,但仍然非常快。
如果要将像素写入数组并快速显示,请使用以下方法:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
image.setAccelerationPriority(0); // Just to be sure
int[] array = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
然后在操作数组后像往常一样绘制图像。
这比使用.setRGB()
具有更高的性能,因为没有进行色彩空间转换。