Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将TIF图像添加到Jlist或框架_Java_Image_Swing_Tiff_Jlist - Fatal编程技术网

在java中将TIF图像添加到Jlist或框架

在java中将TIF图像添加到Jlist或框架,java,image,swing,tiff,jlist,Java,Image,Swing,Tiff,Jlist,我正在尝试加载一个.TIF格式的图像以添加到Jlist中,并将其显示到框架中。 这是我试过的代码,虽然图像被加载了,但我的框架看起来还是空的,没有显示任何内容。 请更正我的代码或建议我进行哪些更改以显示我的.TIF图像 import javax.media.jai.PlanarImage; import com.sun.media.jai.codec.ByteArraySeekableStream; import com.sun.media.jai.codec.ImageCodec; impor

我正在尝试加载一个.TIF格式的图像以添加到Jlist中,并将其显示到框架中。 这是我试过的代码,虽然图像被加载了,但我的框架看起来还是空的,没有显示任何内容。 请更正我的代码或建议我进行哪些更改以显示我的.TIF图像

import javax.media.jai.PlanarImage;
import com.sun.media.jai.codec.ByteArraySeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.SeekableStream;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.awt.Image;
import java.awt.image.RenderedImage;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JList;

public class ImageViewer {
  static Image load(byte[] data) throws Exception {
    Image image = null;
    SeekableStream stream = new ByteArraySeekableStream(data);
    String[] names = ImageCodec.getDecoderNames(stream);
    ImageDecoder dec =
            ImageCodec.createImageDecoder(names[0], stream, null);
    RenderedImage im = dec.decodeAsRenderedImage();
    image = PlanarImage.wrapRenderedImage(im).getAsBufferedImage();
    return image;
}



public static void main(String[] args) throws Exception {
    String path;

    DefaultListModel listModel = new DefaultListModel();
    JFrame frame = new JFrame("Split Pain");
    frame.setSize(700, 500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    path ="C:/Documents and Settings/Administrator/My Documents/My Pictures/tiff Images/CCITT_1.TIF";
    FileInputStream in = new FileInputStream(path);
    FileChannel channel = in.getChannel();
    ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
    channel.read(buffer);
    Image image = load(buffer.array());
    Image imageScaled =image.getScaledInstance(500, -1, Image.SCALE_SMOOTH);
    listModel.addElement(new ImageIcon(imageScaled));
    final JList list = new JList(listModel);
    frame.add(list);
    }
}

您需要为列表提供自己的
ListCellRenderer
实现:

class ImageIconCellRenderer extends JLabel implements ListCellRenderer
{
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
        ImageIcon icon = (ImageIcon)value;
        setIcon(icon);
        return this;
    }
}
然后在主要方法中:

list.setCellRenderer(new ImageIconCellRenderer());

但我不确定标准Java是否支持tiff图像。

PlanarImage image=JAI.create(“文件加载”,“C:\Java\mahes_24_m\09-11-1988\mdr16.tiff”); 使用此语法,您可以加载tiff图像。 BuffereImage bi=image.getasBuffereImage(); 将此bi添加到ListModel,将此ListModel提供给JList,并将JList添加到JFrame。
但首先,您必须下载JAI API才能使用PlanerImage类。

-1您不需要自定义列表渲染器来渲染图标,默认设置已经做到了it@JakubZaverka@Jakub已经提到,tiff可能不支持作为图像格式-尝试将其显示为普通标签中的图标,以便verify@GagandeepBali当然但安装是否正确,更重要的是,TIFF是否是JAI支持的TIFF风格?大多数媒体格式都是“容器格式”,可以使用多种不同的压缩技术(编解码器)进行编码。存在J2SE不支持的有效GIF、JPEG和PNG实例。顺便说一句,我怀疑克利奥帕特拉是否收到了你的评论。最好添加“@name”(无空格),除非软件试图阻止您。@kleopatra:他使用的JAI软件包确实支持TIFF格式:-)@andreThompson:不知道它是否安装正确,这个软件包目前有多少支持。不过,在Java中使用TIFF格式是一个多么好的实践。我尝试了多种方法来解决问题,但最终无法安装。所以我不能说太多。