在Java中Blitting

gru*_*htr 2 java swing awt

我不懂java(通常用c写)

如何有效地将像素数组内容嵌入到java窗口中?

我需要(循环)blit pixels[][]到一个窗口

我可以用类似的东西

 pixels[][] -> MemoryImageSource -> Image -> drawImage 
Run Code Online (Sandbox Code Playgroud)

但创建和删除 MemoryImageSource,并Image 在每一帧觉得奇怪,我-怎么可以简单地,合理高效地完成?有人可以给出一个代码示例,tnx

Jen*_*olm 6

通常在Java中,使用本机Image类型并使用其派生图形更容易.在幕后, Java也使用blits,因此更高级别的抽象是为了减轻工作量.

但是,如果无法对像素数据进行抽象,则可以使用RasterWritableRaster(可以替换部分数组)作为解决方案的替代方案.这些栅格可以与BufferedImage一起使用,然后可以使用您提到的drawImage方法绘制.我在这里找到了一种方法,它基本上创建了Image,然后检索栅格以供将来操作.

int x, y = 100;
BufferedImage image   = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB);
WritableRaster raster = image.getRaster();
Run Code Online (Sandbox Code Playgroud)

然后可以操纵和重新绘制该栅格(或其中的一小部分).

这可能会略微提高性能,因为从像素阵列到屏幕的距离更短.但我认为很少有人完全理解AWT api的全部深度 - 这一切都取决于当然的原生实现 - 所以我的想法包含了一个健康的推测部分;-)但我希望它有所帮助..


tra*_*god 5

对于速度,您可以预先计算其变体ColorModel,如本所示.

图片