簡體   English   中英

Circumvent數組大小> BufferedImage的Integer.MAX_VALUE?

[英]Circumvent Array size > Integer.MAX_VALUE for BufferedImage?

我正在使用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規范中是硬連線的。

要解決您的問題,您需要從簡單的圖像和柵格中抽象出來。 可以將大圖像細分為多個較小的圖像,每個較小的圖像僅包含大圖像的小矩形部分。

這對你在那里遇到的例外沒有幫助。 關於ImageIO內部處理圖像的方式,你無能為力(除了可能將限制注冊為bug)。 您需要找到一個備用庫來讀取大小的圖像,或者自己編寫代碼(很多工作要確定)。

編輯:創建BufferedImage的子類對你沒有幫助,BufferedImage只是底層結構(Raster,DataBuffer)的薄外觀,最終硬連線使用數組進行存儲。 而你仍然會遇到問題ImageIO創建原始BufferedImage類的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM