2009年6月27日 星期六

將JPanel輸入JPG

以下範例示範如何將JPanel的畫面輸出成JPEG

import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class JPanel2JPG {
public static void main(String[] args) throws Exception {
new JPanel2JPG().createAndShowGUI();
}

public void createAndShowGUI() throws Exception
{
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.getContentPane().add(panel);

JButton button = new JButton("將此畫面輸出");
JLabel label = new JLabel("Hello World");
panel.add(button);
panel.add(label);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,300);
frame.setVisible(true);

// 將畫面輸出成圖片
BufferedImage bufferedImage = (BufferedImage) panel.createImage(
panel.getWidth(), panel.getHeight());
panel.paint(bufferedImage.getGraphics());

// 設定檔案輸入目錄
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("c:/jpanel.jpg"));
JPEGImageEncoder imageEncoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam encodeParam =
imageEncoder.getDefaultJPEGEncodeParam(bufferedImage);
encodeParam.setQuality(1.0f, false);
imageEncoder.encode(bufferedImage);
out.flush();
out.close();
}
}