在Java中Blitting

时间:2012-11-27 17:19:31

标签: java swing awt

我不懂java(通常用c写)

如何有效地进行某种blitting方式 像素数组内容到java的窗口?

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

我可以使用像

这样的东西
 pixels[][] -> MemoryImageSource -> Image -> drawImage 

但创建和删除MemoryImageSourceImage 在每一帧中我都觉得很奇怪 - 它怎么可能 简单而有效地完成了吗?有人可以 给出一个代码示例,tnx

2 个答案:

答案 0 :(得分:6)

通常在Java中,使用本机Image类型并使用其派生图形更容易。 Behind the scenes Java也使用blits,因此更高级别的抽象是为了缓解工作量。

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

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

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

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

答案 1 :(得分:5)

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

image