Java - Hiển thị hình tif(Display a TIF image)



Thông thường JDK của JAVA chỉ hỗ trợ xử lý các dang hình ảnh như là JPG, GIF, BMP hoặc PNG với gói ImageIO.

Để xử lý các hình ảnh dạng tif ta cần phải sử dụng gói(package) JAI(Java Advanced Imaging).

Bài viết này tôi sẽ cung cấp một đoạn mã đơn giản dùng để hiển thi hình tif bằng cách sủa dụng gói JAI.




Đầu tiên bạn cần tải(download) gói JAI này về sử dụng. Trong đoạn mã của tôi sử dụng 2 gói JAI của JAI sau:

jai-core-1.1.3-alpha.jar
jai_codec-1.1.3-alpha.jar

Nếu bạn không có hình tif thì có thể download hình sau:

Image_Tif_Demo.tif

Mã ViewTifImage(srouce ViewTifImage)
import java.awt.Dimension;
import java.awt.BorderLayout;

import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;

import java.io.FileInputStream;

import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

import java.awt.Image;
import java.awt.image.RenderedImage;

import javax.media.jai.PlanarImage;

import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.ByteArraySeekableStream;

/**
 * @(#)ViewTiffImage.java
 *
 * ViewTiffImage application
 *
 * @author developer.bnson@gmail.com
 * @version 1.00 2013/7/27
 */

public class ViewTiffImage {
   
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
   
    private static Image load(byte[] data) {
        Image image = null;       
        try {
            SeekableStream stream = new ByteArraySeekableStream(data);
            String[] names = ImageCodec.getDecoderNames(stream);
            ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null);
            RenderedImage im = dec.decodeAsRenderedImage(0);
            image = PlanarImage.wrapRenderedImage(im).getAsBufferedImage();           
        } catch (Exception ex) {
            ex.printStackTrace();           
        }       
        return image;       
    }
   
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         try {
             //"D:/Tutorials/Java_Tutorial/JAVA_Data/LZW.tif"
             //"D:/Tutorials/Java_Tutorial/JAVA_Data/JPG.jpg"
            
            FileInputStream in = new FileInputStream("D:/Tutorials/Java_Tutorial/JAVA_Data/LZW.tif");
            FileChannel channel = in.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate((int)channel.size());
            channel.read(buffer);
            Image image = load(buffer.array());
               
            JLabel emptyLabel = new JLabel(new ImageIcon(image));
            //emptyLabel.setPreferredSize(new Dimension(175, 100));
            frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
                               
         } catch (Exception ex) {
             ex.printStackTrace();
         }

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }       
   
}

  • private static Image load(byte[] data): chức năng dùng để load thông tinh hình ảnh vào đối tượng Image của Java.
  • FileInputStream in = new FileInputStream("D:/Tutorials/Java_Tutorial/JAVA_Data/JPG.jpg"): hàm load image từ ổ cứng(local) vào đối tượng FileInputStream.
  • JLabel emptyLabel = new JLabel(new ImageIcon(image)): hàm dùng để hiển thị image vào đối tượng lable để load lên giao diện.

Ngoài ra đoạn mã(code) có thể load được các loại image khác như JPG, GIF, BMP hoặc PNG.












No comments:

Post a Comment