RLE を使用して画像を圧縮EOFException
しようとするとエラーが発生します。Bitmap
基本的に、ビットマップ イメージの bytearray を取得し、54 番目のバイト以降のすべてに対して RLE 圧縮を実行します。これはすべてヘッダー ファイルのものだからです。次にBMPImageReader
、新しいバイト配列を読み込み、それBMPImageWriter
を新しい RLE8 圧縮ビットマップとして保存します。
ただし、セクションでは
File file = new File("runLength.txt");
...
BMPImageWriteParam imageWriteParam = new BMPImageWriteParam();
imageWriteParam.setCompressionMode(2);
imageWriteParam.setCompressionType("BI_RLE8");
imageWriteParam.setTopDown(true);
BMPImageWriter bmpImageWriter = (BMPImageWriter) ImageIO.getImageWritersByFormatName("bmp").next();
FileImageOutputStream output = new FileImageOutputStream(file);
bmpImageWriter.setOutput(output);
BMPImageReader bmpImageReader = (BMPImageReader) ImageIO.getImageReader(bmpImageWriter);
ImageInputStream iis = ImageIO.createImageInputStream(bais);
bmpImageReader.setInput(iis);
ImageReadParam param = bmpImageReader.getDefaultReadParam();
imageRLE = bmpImageReader.read(0, param);
最後の行で例外をスローします。私はコードをステップ実行しましたが、ヘッダーは正常に渡されますが、最初のバイトを読み取るときに例外がスローされます (私は... 従うのが難しいと思います)。
スタックトレースは次のとおりです。
java.io.EOFException
at javax.imageio.stream.ImageInputStreamImpl.readFully(ImageInputStreamImpl.java:353)
at com.sun.imageio.plugins.bmp.BMPImageReader.read24Bit(BMPImageReader.java:1227)
at com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:882)
at cs24010.RLECompression.stringToImage(RLECompression.java:139)
at cs24010.RLECompression.compress(RLECompression.java:63)
at cs24010.RLECompression.run(RLECompression.java:219)
at java.lang.Thread.run(Thread.java:745)
誰がエラーの原因を知っていますか?