Добавить изображение TIF в Jlist или Frame в Java - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь загрузить изображение в формате .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);
    }
}

Ответы [ 2 ]

1 голос
/ 11 апреля 2012

PlanarImage image = JAI.create ("fileload", "C: \ JAVA \ mahes_24_m \ 09-11-1988 \ mdr16.tiff"); используя этот синтаксис, вы можете загрузить TIFF изображение. BufferedImage bi = image.getAsBufferedImage (); добавить эту би в ListModel и передать эту ListModel в JList, а также добавить JList в JFrame. но сначала вам нужно скачать JAI API, чтобы использовать PlanerImage Class.

0 голосов
/ 12 марта 2012

Вам необходимо предоставить собственную 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());

Но я не уверен, что образы tiff поддерживаются стандартной Java.

...