gpt4 book ai didi

java - 规避 BufferedImage 的数组大小 > Integer.MAX_VALUE?

转载 作者:行者123 更新时间:2023-12-02 06:38:54 26 4
gpt4 key购买 nike

我正在使用 Java 程序进行一些图像处理,目前我正在处理一些相当大的图像(大约十亿像素)。

毫不奇怪,由于以下异常,我无法做很多事情:

Exception:
java.lang.IllegalArgumentException: Array size > Integer.MAX_VALUE!
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1064)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1046)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1014)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1282)
...

我想知道是否有任何方法可以通过使用另一个支持大图像的兼容类重载 BufferedImage 类来规避此限制?

最佳答案

不,数组大小限制在 JVM 和 Java 规范中是硬连接的。

为了解决您的问题,您需要从简单的图像和栅格中进行抽象。一个大图像可以分割为多个较小的图像,每个较小的图像仅包含大图像的一个小矩形部分。

尽管如此,这对您遇到的异常(exception)情况没有帮助。对于 ImageIO 内部处理图像的方式,您无能为力(除了可能将该限制注册为错误)。您将需要找到一个备用库来读取大小的图像,或者自己编写代码(当然需要做很多工作)。

编辑:创建 BufferedImage 的子类对您没有帮助,BufferedImage 只是底层结构(Raster、DataBuffer)的一个薄外观,这些结构最终硬连线以使用数组进行存储。而且 ImageIO 创建原始 BufferedImage 类的实例时仍然会遇到问题。

关于java - 规避 BufferedImage 的数组大小 > Integer.MAX_VALUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com