私はBufferedImage形式でたくさんの小さな画像から巨大な画像ファイルを描画しようとしてきました(1つの大きなBufferedImageを使用すると、私が持っているよりも多くのメモリを消費します)、現在、replacePixels-ImageWriterクラスの関数を介してこれを実行しようとしています。
でも; 大規模なGoogleでも修正できない不可解なエラーが発生するので、ここの誰かが私が間違っていることを教えてくれることを願っています。
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();
}
}