我一直試圖從許多BufferedImage格式的較小圖像中繪製一個巨大的圖像文件(使用一個大的BufferedImage需要比我更多的內存),現在正在嘗試通過ImageWriter類的replacePixels-Function。寫入TIFF:非法字節順序
但是;我得到一個令人費解的錯誤甚至廣泛Googleing無法修復,所以我希望這裏有人能告訴我,我做錯了什麼:
javax.imageio.IIOException: Illegal byte order
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.locateIFD(TIFFImageWriter.java:2813)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.readIFD(TIFFImageWriter.java:3076)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.canReplacePixels(TIFFImageWriter.java:3099)
at drawingTiles.WorldMapMaker$1.writeImg(WorldMapMaker.java:90)
at drawingTiles.WorldMapMaker$1.run(WorldMapMaker.java:148)
at java.lang.Thread.run(Unknown Source)
javax.imageio.IIOException: Illegal byte order
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.locateIFD(TIFFImageWriter.java:2813)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.readIFD(TIFFImageWriter.java:3076)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriter.prepareReplacePixels(TIFFImageWriter.java:3141)
at drawingTiles.WorldMapMaker$1.writeImg(WorldMapMaker.java:104)
at drawingTiles.WorldMapMaker$1.run(WorldMapMaker.java:148)
at java.lang.Thread.run(Unknown Source)
我知道一個字節順序是什麼,我不知道如何字節順序可能是非法的。這是我使用的功能:
public void writeImg (String path, int startx, int starty, BufferedImage image){
File output = new File(path);
ImageOutputStream ios = null;
try {
ios = ImageIO.createImageOutputStream(output);
} catch (IOException e){
e.printStackTrace();
}
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("TIF");
ImageWriter writer = (ImageWriter)iter.next();
writer.setOutput(ios);
TIFFImageWriteParam writeParam = new TIFFImageWriteParam(Locale.ENGLISH);
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
try{
if(writer.canReplacePixels(0)){ // LINE 90
System.out.println("True");
}else{
System.out.println("False");
}
}catch (IOException e) {
e.printStackTrace();
}
Point destinationOffset = new Point(startx,starty);
writeParam.setDestinationOffset(destinationOffset);
try {
writer.prepareReplacePixels(0, new Rectangle(0, 0, image.getWidth(), image.getHeight())); // LINE 104
writer.replacePixels(image, writeParam);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}