Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解压PackBits TIFF时的Apache Commons Sanselan AIOOBE_Java_Apache Commons_Indexoutofboundsexception - Fatal编程技术网

Java 解压PackBits TIFF时的Apache Commons Sanselan AIOOBE

Java 解压PackBits TIFF时的Apache Commons Sanselan AIOOBE,java,apache-commons,indexoutofboundsexception,Java,Apache Commons,Indexoutofboundsexception,尝试使用Apache Commons Sanselan加载使用PackBits压缩压缩的TIFF时出现开箱即用的ArrayIndexOutOfBounds异常 代码: import org.apache.sanselan.*; public class TIFFHandler { public static Image loadTIFF(String fileName) throws ImageReadException, IOException { File imag

尝试使用Apache Commons Sanselan加载使用PackBits压缩压缩的TIFF时出现开箱即用的ArrayIndexOutOfBounds异常

代码:

import org.apache.sanselan.*;

public class TIFFHandler {
    public static Image loadTIFF(String fileName) throws ImageReadException, IOException {
        File imageFile = new File(fileName);
        BufferedImage bi = Sanselan.getBufferedImage(imageFile);
        return bi;
    }

    public static void main(String[] args) throws IOException, ImageReadException {
        String TIFFFILE = "test_image.tif";
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        BufferedImage bi = (BufferedImage) loadTIFF(TIFFFILE);
        ImageIcon ii = new ImageIcon(bi);
        JLabel lbl = new JLabel(ii);
        panel.add(lbl);
        frame.setVisible(true);
    }
}
堆栈跟踪:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 426
at org.apache.sanselan.common.PackBits.decompress(PackBits.java:55)
at org.apache.sanselan.formats.tiff.datareaders.DataReader.decompress(DataReader.java:127)
at org.apache.sanselan.formats.tiff.datareaders.DataReaderStrips.readImageData(DataReaderStrips.java:96)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:505)
at org.apache.sanselan.formats.tiff.TiffDirectory.getTiffImage(TiffDirectory.java:163)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:441)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1255)
at TIFFHandler.loadTIFF(FieldSheetHandler.java:42)
at TIFFHandler.main(FieldSheetHandler.java:90)

我试图分析这个问题,但我很迷茫……任何方向都会很有帮助。TIFF图像是a**中的一个难题。

您可以从Apache快照存储库中尝试更新版本的Commons Imaging。Javadoc尚未联机,您必须通过运行
mvnjavadoc:Javadoc
来构建它


如果您发现更多问题或希望提出改进建议,您可以将其归档。此外,如果您对API的使用有疑问,开发人员也会很乐意帮助您。他们在车上等你。

你试过后备箱里的代码了吗?Commons Sanselan(将更名为Commons Imaging)最近在向1.0版本迈进的过程中发生了很大变化。我正在使用最新的.JAR文件(Sanselan-0.97.incubator.JAR)——这是主干代码吗?似乎没有主干/分支分化……不,它已经3年了。您可以从Apache快照存储库获取夜间构建JAR:太棒了!这基本上解决了我的问题(如果你发布答案,我会接受)。另外,是否有更新的Javadoc用于Commons imaging?我需要一种方法来加载一个TIFF的特定子图像而不加载所有子图像(由于内存限制)…感谢这一点;这正是我需要的!我能够构建一个新方法,只获取我想要的BuffereImage,而不是第一个或全部。