Java位图RLE8格式

Java位图RLE8格式,java,image,javax.imageio,image-compression,run-length-encoding,Java,Image,Javax.imageio,Image Compression,Run Length Encoding,Java ImageIO(或任何其他图像处理程序)是否支持BI_RLE8图像格式?我唯一能找到的就是,但我不知道如何使用它。 任何帮助都会很好。如果您想使用自定义参数保存图像,则必须使用可以向其中传递自定义参数以写入输出文件的 您可以使用可以设置压缩类型的方法从ImageWriter获取参数。您甚至不必将其强制转换为,因为可以通过超级接口设置压缩类型 请注意,要使用自定义压缩类型,必须将压缩模式设置为 以下是完整的代码: BufferedImage bi = new BufferedImage(

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

如果您想使用自定义参数保存图像,则必须使用可以向其中传递自定义参数以写入输出文件的

您可以使用可以设置压缩类型的方法从ImageWriter获取参数。您甚至不必将其强制转换为,因为可以通过超级接口设置压缩类型

请注意,要使用自定义压缩类型,必须将压缩模式设置为

以下是完整的代码:

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
压缩并不适用于所有类型的s。
对于exmaple
BI_RLE8
压缩受
BuffereImage支持。TYPE_BYTE_index
BuffereImage.TYPE_BYTE_GRAY
但不受
BuffereImage支持。TYPE_3BYTE_BGR
在这种情况下,
ImageWriter.write()
方法将引发
IOException
(实际上是
BMPImageWriter.write()
)。

有关如何使用
ImageWriter
ImageWriteParam
进行写入的信息,请参阅(在您的案例中使用
BMPImageWriteParam
)。向下滚动一点以查找写入示例

而不是行:

ImageWriteParam param = writer.getDefaultWriteParam();
您应该插入如下内容:

BMPImageWriteParam param = new BMPImageWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");
您可以安全地为缩略图和元数据传递
null
)。

setCompressionType()
与所需类型一起使用。如文档中所述,列出的所有4种类型均受支持。我已删除您的“谢谢”-备注和新问题。您可以通过向上投票有用的答案并接受最佳答案来表示感谢。如果您有新问题或后续问题,请创建新问题;如果您认为相关,请添加回此问题的链接。