【发布时间】:2017-07-04 21:26:41
【问题描述】:
我需要在 java 中创建一个非常大的图像,到目前为止我一直在使用 java.awt.image.BufferedImage 类。但似乎这个类用 int 存储它的像素,因为它不能超过 2^31 像素。我曾考虑过创建较小的图像并将它们拼接在一起,但问题是我尝试使用的照片编辑器(如 Adobe Photoshop)甚至无法导入任何尺寸大于 30,000 像素的照片。
我曾考虑过制作自己的图像类,但我的知识还不够丰富,无法将所有内容都纳入其中。
有什么建议吗? 谢谢你
【问题讨论】:
-
为什么它需要是一个图像?或者您可以使用某种堆外 2D 缓冲区吗?您自己说,即使您以某种方式做到了这一点,它也无法在任何程序中使用。根据现有信息,这似乎是一个非常奇怪的问题。如此广泛,它可能会被标记为离题。如果您提供更多详细信息,也许有人可以帮助您了解自定义图像的想法,如果这确实是您需要的(可能使用自定义
java.awt.image.{DataBuffer,Raster,...})。 -
我正在创建生成类似分形图片的迭代函数系统图像,并且我正计划制作这些图像的大型打印件。
-
请注意,即使您可以绕过 Java BufferedImage 类中的限制,图像文件格式仍然存在限制。例如JPEG 在每个维度上最多支持 65535 像素,而 TIFF 的最大文件大小为 4Gb。您打算为打印机提供什么格式?
-
取决于你的绘图功能是如何工作的,如果从上到下一次画一条线,你可以简单地画出每一条线并将其直接写入磁盘。这可能是原始 RBG 格式,然后您可以将其与其他内容一起处理为另一种图像格式。
-
必须是
BufferedImage吗?BufferedImage类通常由单个数组支持,这使得 Java 数组大小限制成为更多问题,而不是物理内存。不过,您可以尝试自定义DataBuffer实现。如果您能够一次处理图像的区域,我还将研究支持图块的RenderedImage接口。
标签: java image bufferedimage