2012-03-12 14 views
1

Jlistに追加してフレームに表示するために.TIF形式の画像をロードしようとしています。 ここに私のコードは私が試したものです、ここに画像がロードされても私のフレームはまだ空に見え、何も表示されません。 私のコードを修正してください。私は自分の.TIFイメージを表示させるための変更点を教えてください。TIF画像をJlistまたはJavaのフレームに追加

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); 
    } 
} 
+1

@Jakubは、すでに述べたように、TIFF画像形式としてサポートされない可能性があります - – kleopatra

+0

@GagandeepBali確かに確認するために、プレーンラベルにアイコンとして表示してみてください。しかし、正しくインストールされていますが、もっと重要なことは、JAIがサポートしているTIFFのフレーバーのTIFFですか?ほとんどのメディアフォーマットは、さまざまな圧縮技術(CODEC)を使用してエンコードされる「コンテナフォーマット」です。 J2SEがサポートしていない有効なGIF、JPEG、PNGのインスタンスがあります。 BTW - あなたのコメントがkleopatraに通知されたのかどうかは疑問です。ソフトウェアがあなたを止めさせない限り、「@名前」(空白なし)を追加するのがベストです。 –

+0

@kleopatra:このパッケージは現時点で持っているどのくらいのサポート、それが適切かどうかがインストールされ事実について知らない:彼が使用するJAIパッケージは –

答えて

1

PlanarImageイメージ= JAI.create( "fileload"、 "C:\ JAVA \ mahes_24_m \ 09-11-1988 \ mdr16.tiff"); この構文を使用すると、tiffイメージを読み込むことができます。 BufferedImage bi = image.getAsBufferedImage(); このBiをListModelに追加し、このListModelをJListに与え、JListをJFrameに追加します。 しかし、まず、PlanerImageクラスを使用するにはJAI APIをダウンロードする必要があります。

-1

あなたがリストに独自の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; 
    } 
} 

し、メインメソッドで:私は確信してTIFF画像がでサポートされていないです

list.setCellRenderer(new ImageIconCellRenderer()); 

しかし、標準のJava。

+2

-1あなたはアイコンをレンダリングするためにカスタムリストレンダラーを必要としない、デフォルトがすでにうわー、私にとっては非常に驚き、それを – kleopatra

+0

ない... –

+2

@Jakub Zaverka [レンダラは、リスト内の次のタイプのデータを知っている:](HTTP: //docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender) – mKorbel

関連する問題