6

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

4

2 回答 2

3

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

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

瞥见头像

它利用OpenGL来利用现代 GPU 上的硬件特性,如纹理内存和着色器来实现上述目标。因此,如果您打算使用 Java2D,那么这对您不起作用。但是,Glimpse 面板可以与其他 Swing 组件并排放置,因此可以轻松放入现有的 Swing GUI。唯一需要注意的是,您需要一块像样的显卡。

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

您可以在glimpse.metsci.com了解更多信息。首页上有一个介绍视频,以及Java WebStart 示例。源代码托管在GitHub 上

于 2012-05-03T21:28:01.300 回答
1

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

于 2012-05-03T23:14:39.067 回答