java - Java 中的位 block 传送

标签 java swing awt

我不会java(一般用c写)

我怎样才能有效地进行某种位 block 传送方式 java中的像素数组内容到窗口上?

我需要(在循环中)将像素[][]传输到窗口上

我可以使用类似的东西

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

但是创建和删除MemoryImageSourceImage 每一帧对我来说都很奇怪——怎么会这样 简单合理高效地完成?有人可以吗 给出一个代码示例,tnx

最佳答案

通常在 Java 中,使用 native Image 类型并使用其派生图形会更容易。 Behind the scenes Java 也使用 blit,因此进行了更高级别的抽象以减轻工作量。

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

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

然后可以对该栅格(或其中的一小部分)进行操作和重新绘制。

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

关于java - Java 中的位 block 传送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13589550/

相关文章:

java - 为什么 AffineTransform 旋转时会缩放

java - getSource() - 我在这里做错了什么?

java - JFileChooser 返回 FileNotFoundException

java - 如何让 KeyListener 使用主线程而不是 EDT?

java - 按钮最初不绘制

java - 将值从 A 类返回到 B 类,然后返回到 Main 类?

java - inappmessaging-display :17. 0.0' CreateProcess error=206,文件名或扩展名太长

具有进度状态的 Java/Spring 线程

java - 确保始终从 Spring 应用程序的缓存中检索数据

java - AWT EventQqueue AccessControlException