【问题标题】:tiff image is not showing properlytiff 图像未正确显示
【发布时间】:2016-05-02 07:28:52
【问题描述】:

我想加载一个很大的 tiff 文件。我将堆大小更改为 800m 左右,因此图像已加载但未正确显示:

  1. 这是我的真实图片:

  2. 这是我加载后得到的图片截图:

这是我加载 tiff 文件的代码:

private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {
    JFileChooser fc = new JFileChooser(Database.basePath);

    FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("TIF Files", "tif");
    fc.setFileFilter(extensionFilter);
    int res = fc.showOpenDialog(null);
    File file = null;
    // We have an image!
    try {
        if (res == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();
            System.out.println(file.getAbsolutePath().toString().substring(0,
                    file.getAbsolutePath().toString().lastIndexOf("/")));
            path = file.getAbsolutePath().toString().substring(0,
                    file.getAbsolutePath().toString().lastIndexOf("/"));
            basepath = file.getAbsolutePath().toString().replace(".tif", ".xml");
            System.out.println("path:  " + basepath);
            setTarget(file);

            // System.out.println("canoic"+file.getCanonicalPath());
        } // Oops!

        else {
            JOptionPane.showMessageDialog(null, "You must select one image to be the reference.", "Aborting...",
                    JOptionPane.WARNING_MESSAGE);
        }

    } catch (Exception iOException) {
    }
public void setTarget(File reference) {
    try {
        targetImg = null;
        System.out.println("in try" + reference.getAbsolutePath());
        targetFile = reference;
        byte[] data = Files.readAllBytes(Paths.get(reference.getAbsolutePath()));
        targetImg = rescale(data);

    } catch (IOException ex) {
        System.out.println("in Catch");
        Logger.getLogger(HelloWorld.class.getName()).log(Level.SEVERE, null, ex);
    }

    panel_1.setLayout(new BorderLayout(0, 0));
    label = new JLabel(new ImageIcon(targetImg));
    JScrollPane scroll = new JScrollPane(label);
    panel_1.add(scroll);
    scroll.addMouseListener(this);
    scroll.addMouseMotionListener(this);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout(0, 0));

    setVisible(true);
}
public BufferedImage rescale(byte[] originalImage) {

    TiffDecoder decoder;
    BufferedImage decodedImage = null;
    try {
        decoder = new TiffDecoder(originalImage);
        decodedImage = decoder.read();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return decodedImage;
}`

【问题讨论】:

  • 请包含您正在加载该图像的setTarget 方法的代码
  • 使用ImageIO API 代替从文件中读取字节
  • 什么是重新缩放?
  • 好的,谢谢您的回答。但我不知道如何使用 imageIo Api 进行阅读。你能帮助我吗? @Sanjeev
  • 当然 .. 告诉我你想用rescale 达到什么目的?

标签: java tiff


【解决方案1】:

您可以使用ImageIO#read阅读您的图片

BufferedImage image = ImageIO.read(file);

然后将此图片设置为ImageIcon

 label = new JLabel(new ImageIcon(image));

您需要将jai_imageio.jar 放在您的类路径中

【讨论】:

  • 谢谢@Sanjeev
  • 欢迎您。如果对您有帮助,请接受作为答案/投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多