2

不懂java(一般用c写)

我怎样才能有效地以某种方式将像素数组内容blitting到java中的窗口上?

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

我可以使用类似的东西

 pixels[][] -> MemoryImageSource -> Image -> drawImage 

但是在每一帧中创建和删除 MemoryImageSourceImage 对我来说似乎很奇怪 - 如何简单有效地完成它?有人可以给出一个代码示例,tnx

4

2 回答 2

6

Image通常在 Java 中,使用原生类型和使用它们的派生图形更容易。在幕后, Java 也使用 blit,因此进行了更高级别的抽象以减轻工作量。

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

int x, y = 100;
BufferedImage image   = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB);
WritableRaster raster = image.getRaster();

然后可以操纵和重新绘制该光栅(或只是它的一小部分)。

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

于 2012-11-27T18:37:57.680 回答
5

对于速度,您可以预先计算 的变化ColorModel,如本所示。

图片

于 2012-11-27T18:49:31.703 回答