用Java读写TIFF图像

我尝试了以下代码来完成读取和写入tiff图像的任务:

 // Define the source and destination file names.

String inputFile = /images/FarmHouse.tif

String outputFile = /images/FarmHouse.bmp

// Load the input image.

RenderedOp src = JAI.create("fileload", inputFile);

// Encode the file as a BMP image.

FileOutputStream stream =

new FileOutputStream(outputFile);

JAI.create("encode", src, stream, BMP, null);

// Store the image in the BMP format.

JAI.create("filestore", src, outputFile, BMP, null);

但是,当我运行代码时,出现以下错误消息:

Caused by: java.lang.IllegalArgumentException: Only images with either 1 or 3 bands 

can be written out as BMP files.

at com.sun.media.jai.codecimpl.BMPImageEncoder.encode(BMPImageEncoder.java:123)

at com.sun.media.jai.opimage.EncodeRIF.create(EncodeRIF.java:79)

知道如何解决这个问题吗?

回答:

读取TIFF并输出BMP的最简单方法是使用ImageIO类:

BufferedImage image = ImageIO.read(inputFile);

ImageIO.write(image, "bmp", new File(outputFile));

要使此功能正常工作,您唯一需要做的另一件事是确保已将JAI ImageIO JAR添加到类路径中,因为如果没有此库中的插件,JRE不会处理BMP和TIFF。

如果由于某种原因不能使用JAI

ImageIO,则可以使其与现有代码一起使用,但是您必须做一些额外的工作。为您正在加载的TIFF创建的颜色模型可能是BMP不支持的索引颜色模型。您可以通过提供带有JAI.KEY_REPLACE_INDEX_COLOR_MODEL键的呈现提示来用JAI.create(“

format”,…)操作替换它。

您可能有些运气,将从文件中读取的图像写入临时图像,然后写出临时图像:

BufferedImage image = ImageIO.read(inputFile);

BufferedImage convertedImage = new BufferedImage(image.getWidth(),

image.getHeight(), BufferedImage.TYPE_INT_RGB);

convertedImage.createGraphics().drawRenderedImage(image, null);

ImageIO.write(convertedImage, "bmp", new File(outputFile));

我想知道您是否遇到了与常规JAI相同的索引颜色模型问题。理想情况下,除了最简单的情况外,您应该使用ImageIO类来获取ImageReader和ImageWriter实例,以便可以相应地调整读写参数,但是ImageIO.read()和.write()可以精巧地为您提供你想要什么。

以上是 用Java读写TIFF图像 的全部内容, 来源链接: utcz.com/qa/431447.html

回到顶部