有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

图像Java位图RLE8格式

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


共 (2) 个答案

  1. # 1 楼答案

    如果要使用自定义参数保存图像,则必须使用^{},可以向其传递自定义参数以写入输出文件

    可以使用^{}方法从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压缩。
    对于exmaple BI_RLE8压缩支持BufferedImage.TYPE_BYTE_INDEXEDBufferedImage.TYPE_BYTE_GRAY,但不支持BufferedImage.TYPE_3BYTE_BGR,在这种情况下,ImageWriter.write()方法(实际上是BMPImageWriter.write())将抛出IOException

  2. # 2 楼答案

    有关如何使用ImageWriterImageWriteParam(在您的案例中使用BMPImageWriteParam的实例)进行编写,请参见this example。向下滚动一点以找到编写示例

    而不是台词:

    ImageWriteParam param = writer.getDefaultWriteParam();
    

    您应该插入如下内容:

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

    您可以安全地传递null以获取缩略图和元数据(示例中为...