1

Java ImageIO(或任何其他图像处理程序)是否支持 BI_RLE8 图像格式?我唯一设法找到的是BMPImageWriteParam但我不知道如何使用它。任何帮助都会很棒。

4

2 回答 2

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压缩不适用于所有类型的BufferedImages。
例如BI_RLE8,支持压缩BufferedImage.TYPE_BYTE_INDEXEDBufferedImage.TYPE_BYTE_GRAY但不支持BufferedImage.TYPE_3BYTE_BGR在这种情况下IOException,方法将抛出an ImageWriter.write()(实际上是BMPImageWriter.write())。

于 2014-11-27T11:22:17.923 回答
1

有关如何编写 using和 using的信息,请参阅此示例(在您的情况下使用 of 的实例)。向下滚动一点以找到写入示例。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 回答