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
s。
例如BI_RLE8
,支持压缩BufferedImage.TYPE_BYTE_INDEXED
,BufferedImage.TYPE_BYTE_GRAY
但不支持BufferedImage.TYPE_3BYTE_BGR
在这种情况下IOException
,方法将抛出an ImageWriter.write()
(实际上是BMPImageWriter.write()
)。
有关如何编写 using和 using的信息,请参阅此示例(在您的情况下使用 of 的实例)。向下滚动一点以找到写入示例。ImageWriter
ImageWriteParam
BMPImageWriteParam
而不是行:
ImageWriteParam param = writer.getDefaultWriteParam();
你应该插入类似的东西:
BMPImageWriteParam param = new BMPImageWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");
您可以安全地传递null
缩略图和元数据(...
在示例中)。