2012-05-22 86 views
0

當試圖使用Apache-Commons Sanselan加載用PackBits壓縮壓縮的TIFF時,開箱即用的ArrayIndexOutOfBoundsException。Apache-Commons Sanselan AIOOBE解壓縮PackBits時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) 

我已經嘗試對問題的分析,但我敢輸了...任何方向將是很有益。 TIFF圖像是a **中的一種痛苦。

+0

你嘗試從樹幹上的代碼?下議院Sanselan(將改名爲下議院成像)最近已改變了很多,因爲它向1.0版本的進展。 –

+0

我正在使用最新的.JAR文件(sanselan-0.97.incubator.jar) - 這是中繼碼嗎?似乎沒有成爲一個主幹/分支分化... – BenCole

+0

沒有它的3歲。您可以從Apache快照存儲庫中獲取夜間構建jar:https://repository.apache.org/content/groups/snapshots/org/apache/commons/commons-imaging/1.0-SNAPSHOT/ –

回答

1

你可以嘗試共享成像從Apache快照庫的更新版本。的Javadoc不在線呢,你就必須通過checking out the code from SVN和運行mvn javadoc:javadoc來構建它。

如果你發現更多的問題還是要建議你可以在JIRA提交他們的改善。如果您對API的使用有疑問,開發人員也很樂意爲您提供幫助。他們在mailing list等待着你。

+0

感謝您的支持,這正是我需要的!我能夠構建一個新的方法來獲取我想要的BufferedImage,而不是第一個或全部。 – BenCole