Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建和绘制大型(缓冲)图像_Java_Image Processing_Java 2d - Fatal编程技术网

在Java中创建和绘制大型(缓冲)图像

在Java中创建和绘制大型(缓冲)图像,java,image-processing,java-2d,Java,Image Processing,Java 2d,我正在开发一个应用程序,它使用Java 2D绘制一个矩阵,这个矩阵可以变得非常大,例如30000 x 30000像素。 目前,我已经对BuffereImage进行了一些实验,但创建如此巨大的BuffereImage会导致内存不足异常,即使在扩大堆时也是如此。 现在我正在考虑将图像分割成几个图像/区域,当我在某个区域完成后,将其写入磁盘,创建一个新的区域/缓冲区图像并继续绘制。 我感兴趣的是其他人如何处理这件事的想法。我已经离开Java一段时间了,所以欢迎提供任何具体的示例。我为一个新的/小型的开

我正在开发一个应用程序,它使用Java 2D绘制一个矩阵,这个矩阵可以变得非常大,例如30000 x 30000像素。 目前,我已经对BuffereImage进行了一些实验,但创建如此巨大的BuffereImage会导致内存不足异常,即使在扩大堆时也是如此。 现在我正在考虑将图像分割成几个图像/区域,当我在某个区域完成后,将其写入磁盘,创建一个新的区域/缓冲区图像并继续绘制。
我感兴趣的是其他人如何处理这件事的想法。我已经离开Java一段时间了,所以欢迎提供任何具体的示例。

我为一个新的/小型的开放源码项目做了贡献,该项目可能非常适合您的需要

该项目正在进行中。其目的是帮助在Java中构建2D数据可视化,重点是很好地处理大型数据集,并使其易于提供实时交互性,以便轻松地探索数据

它利用现代GPU上的硬件功能(如纹理内存和着色器)来实现上述目标。因此,如果您打算使用Java2D,那么这将不适用于您。但是,预览面板可以与其他Swing组件并排放置,因此很容易进入现有的Swing GUI。唯一的警告是你需要一个像样的显卡

图像是一个大型数据矩阵的示例,其颜色通过右侧的颜色比例进行动态调整(矩阵数据存储在GPU纹理中,动态重新着色通过自定义着色器完成)。这个例子的来源是。还有很多其他类似的例子,为使用Spile的其他功能提供了起点


您可以在网站上了解更多信息。头版有一段介绍视频,还有。源代码位于上。

如果您只想在磁盘上生成图像,请查看-它可以生成大的png图像,没有问题,因为它会在可用时将像素行写入磁盘。该api有点特定于png,但并不太复杂(在使用png图像格式之前阅读一点背景可能会有所帮助)。

有趣的是,我们一定会研究这个问题。谢谢,谢谢你的回答。我已经研究了pngj,但我仍然在想如何使用pngj将BuffereImage绘制到磁盘,例如,你不会。我想问题是缓冲图像占用了太多内存?pngj避免了这种情况——您直接将像素写入磁盘。对不起,如果我误解了。对不起,让人困惑,但你是对的,这就是问题所在。让我这样说吧,您将如何将Java 2D api与PNGJ一起使用?同样,您不会o) 对不起。如果您需要使用Java图像API在Java中进行复杂的处理,那么它将无法工作——它根本没有连接到Java图像API。它是完全独立的。但是,如果您有一些数字处理,可以生成要转换为图像的数据,并且可以沿行逐像素计算,那么您可以计算rgb值并将其发送到png(我认为您可以使用第三方工具生成图像的子集/缩放版本,然后将其读入java…)