尝试使用Apache-Commons Sanselan加载以PackBits压缩压缩的ArrayIndexOutOfBoundsException时的开箱即用的TIFF.
代码:
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)我已经尝试过对这个问题进行分析,但我认为lost...any方向会很有帮助。TIFF图像在a**中是一种痛苦。
发布于 2012-05-23 22:57:02
您可以从Apache快照存储库中尝试Commons Imaging的更新版本。Javadoc还没有上线,你必须通过checking out the code from SVN和运行mvn javadoc:javadoc来构建它。
如果您发现更多问题或想要提出改进建议,可以将它们提交到JIRA。此外,如果您对API的使用有疑问,开发人员也会很乐意为您提供帮助。他们在mailing list上等你。
https://stackoverflow.com/questions/10709373
复制相似问题