我一直试图从许多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();
}
}