gpt4 book ai didi

Java ImageIO-ext TIF 文件读取时损坏

转载 作者:行者123 更新时间:2023-11-30 04:47:29 26 4
gpt4 key购买 nike

我正在尝试使用最少数量的附加库在 Java 中显示 .tif:

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

import javax.media.jai.widget.*;
import it.geosolutions.imageio.utilities.*;
import it.geosolutions.imageioimpl.plugins.tiff.*;
import com.sun.media.imageioimpl.common.*;

public static void main(String[] args) {
try {
File f = new File("image.tif");
BufferedImage tif = ImageIO.read(f);
ImageIcon ic = new ImageIcon(tif);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JLabel label = new JLabel(ic);
frame.add(label);
frame.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}

我正在使用的库是:

 jai-core-1.1.3.jar
jai-imageio-1.1.jar
imageio-ext-tiff.1.1.3.jar
imageio-ext-utilities.1.1.3.jar

从这里:http://java.net/projects/imageio-ext (右侧有下载链接)

但是,显示的图像是: corrupted-tif这绝对不是原始图像。据我所知,也没有抛出任何错误。此外,原始图像很好,没有改变。

但是,原来的代码很小。我实际上并没有使用 imageio-ext 导入,但如果没有它们,程序将会失败。我之前也没有使用过imageio-ext

请帮忙!我需要能够在 Java 中使用 .tif 图像而无需安装软件。

最佳答案

如果您已经使用所有 JAI/ImageIO 库,您可能想尝试以下操作(对我来说效果很好):

import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;

// This function is minimal, you should add exceptions and error handling
public RenderedImage read(String filename)
FileSeekableStream fss = new FileSeekableStream(filename);
ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", fss, null);
RenderedImage image = decoder.decodeAsRenderedImage()
fss.close();
return image;
}

如果您需要BufferedImage而不是RenderedImage ,我找到的唯一解决方案是使用这个函数:

public static BufferedImage Rendered2Buffered(RenderedImage image) {
BufferedImage bi = new BufferedImage(image.getWidth(), image.getHeight(), image.getSampleModel().getDataType());
bi.setData(image.getData());
return bi;
}

但要小心,image.getSampleModel().getDataType()通常返回 BufferedImage.TYPE_CUSTOM ,这使得 BufferedImage 不可能待创建!就我而言,我必须根据 image.getSampleModel().getSampleSize(0) 返回的样本大小“猜测”类型。 (因为我知道我正在使用的图像格式)。如果您知道更好的改造方法RenderedImageBufferedImage ,请赐教:)

关于Java ImageIO-ext TIF 文件读取时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com