Java ImageIO (またはその他の画像ハンドラー) は BI_RLE8 画像形式をサポートしていますか? 私が見つけた唯一のものはBMPImageWriteParam ですが、それを使用する方法がまったくわかりません。どんな助けでも素晴らしいでしょう。
2 に答える
カスタム パラメータを使用して画像を保存する場合は、ImageWriter
カスタム パラメータを渡して出力ファイルを書き込むことができる を使用する必要があります。
圧縮タイプを設定できるメソッドImageWriter
を使用して、からパラメーターを取得できます。圧縮タイプの設定はスーパーインターフェイスを介して利用できるためgetDefaultWriteParam()
、キャストする必要さえありません。BMPImageWriteParam
ImageWriter
カスタム圧縮タイプを使用するには、圧縮モードを に設定する必要があることに注意してください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_INDEXED
andに対してサポートされていますが、メソッドによって がスローされる場合(実際には)BufferedImage.TYPE_BYTE_GRAY
ではサポートされていません。BufferedImage.TYPE_3BYTE_BGR
IOException
ImageWriter.write()
BMPImageWriter.write()
usingと usingの書き方については、この例を参照してください(あなたの場合は のインスタンスを使用してください)。少し下にスクロールして、書き込み例を見つけます。ImageWriter
ImageWriteParam
BMPImageWriteParam
行の代わりに:
ImageWriteParam param = writer.getDefaultWriteParam();
次のようなものを挿入する必要があります。
BMPImageWriteParam param = new BMPImageWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");
null
サムネイルとメタデータ (例では)を安全に渡すことができます...
。