java - 如何从 java 中的许多图 block 创建大图像文件?

标签 java tiles java-2d

我的程序一张一张地生成 10 x 10 个 3000x3000 像素的图 block 图像(当前保存到 100 个名为 image_x_y.jpg 的文件)

我想将这 100 张图片组合成一张大图片,而不是将所有内容都加载到内存中。我的目标是创建一个 30'000 * 30'000 像素的大图像文件。

我正在寻找一种方法来使用 JAI(不能从公共(public) maven 存储库安装,我不明白为什么)

有没有办法用纯 java2D 做到这一点?或者是否存在另一个能够处理此问题的库?

我最初的想法是创建一个非常大的缓冲图像,从一个 DataBuffer 备份到磁盘上的一个文件。但我不确定这是否可能。有没有人这样做过?

最佳答案

I want to assemble these 100 images into one big image, without loading everything in memory. My goal is to create one big image file, of 30'000 * 30'000 pixels.

我相信 JAI 中有一个类可以做到这一点。无论您在将 JAI 集成到您的项目中遇到什么问题,我都会坚持这样做,而不是推出您自己的版本。 Java2D 中没有这样的东西。

My original idea was to create a very big buffered image, from a DataBuffer backed to a file on the disk. But i'm not sure that this is possible. Did anybody ever do this ?

是的,我写了一个不完整的实现。它由

  • 一个由 ByteBuffer 而不是数组支持的 DataBuffer(如果缓冲区是直接的,它可以映射到一个文件。)
  • WritableRaster 类似于标准栅格,但使用我的 DataBuffer 实现(JDK 中的标准栅格通过持有对支持数组的引用来作弊。没有在直接 ByteBuffer 的情况下是数组,所以不幸的是你必须重新实现大多数 Raster 方法。)

我不建议扩展 SampleModel,因为您的类将无法使用 JDK 光栅(Java2D 中的各种方法,包括 Raster 工厂方法会打开 SampleModel 假设它是标准模型之一。糟糕的设计恕我直言,但除了遵循相同的模式之外你无能为力。)

关于java - 如何从 java 中的许多图 block 创建大图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412805/

相关文章:

java - Spring Boot @WebMvcTest 中模拟方法返回值为 null

java - 在 Firebase 中保存和检索日期

java - 如何提高抓砖类(class)的速度?

java - 我如何正确对齐此文本?

Java 使用 JPA 2.1 和 @ManyToOne 上的 hibernate 部分加载实体

java - map fragment 直接将相机移动到当前位置

android - 如何使用 LibGdx 在 Tilemap 中制作动画?

php - 解析 3D XML 平铺信息

java - 在 paint 方法中绘制形状

java - 矩形不断脱离面板(屏幕)