1

Java ImageIO (またはその他の画像ハンドラー) は BI_RLE8 画像形式をサポートしていますか? 私が見つけた唯一のものはBMPImageWriteParam ですが、それを使用する方法がまったくわかりません。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

カスタム パラメータを使用して画像を保存する場合は、ImageWriterカスタム パラメータを渡して出力ファイルを書き込むことができる を使用する必要があります。

圧縮タイプを設定できるメソッドImageWriterを使用して、からパラメーターを取得できます。圧縮タイプの設定はスーパーインターフェイスを介して利用できるためgetDefaultWriteParam()、キャストする必要さえありません。BMPImageWriteParamImageWriter

カスタム圧縮タイプを使用するには、圧縮モードを に設定する必要があることに注意してくださいImageWriteParam.MODE_EXPLICIT

完全なコードは次のとおりです。

BufferedImage bi = new BufferedImage(200, 100, BufferedImage.TYPE_BYTE_INDEXED);

ImageWriter writer  = ImageIO.getImageWritersByFormatName("bmp").next();
ImageWriteParam param = writer.getDefaultWriteParam();

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");

writer.setOutput(new FileImageOutputStream(new File("test.bmp")));
writer.write(null, new IIOImage(bi, null, null), param);
writer.dispose();        

BI_RLE8圧縮は、すべてのタイプの で使用できるわけではないことに注意してくださいBufferedImage
たとえばBI_RLE8、圧縮はBufferedImage.TYPE_BYTE_INDEXEDandに対してサポートされていますが、メソッドによって がスローされる場合(実際には)BufferedImage.TYPE_BYTE_GRAYではサポートされていません。BufferedImage.TYPE_3BYTE_BGRIOExceptionImageWriter.write()BMPImageWriter.write()

于 2014-11-27T11:22:17.923 に答える
1

usingと usingの書き方については、この例を参照してください(あなたの場合は のインスタンスを使用してください)。少し下にスクロールして、書き込み例を見つけます。ImageWriterImageWriteParamBMPImageWriteParam

行の代わりに:

ImageWriteParam param = writer.getDefaultWriteParam();

次のようなものを挿入する必要があります。

BMPImageWriteParam param = new BMPImageWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");

nullサムネイルとメタデータ (例では)を安全に渡すことができます...

于 2014-11-27T11:23:55.660 に答える