1 package jp.digitalmuseum.capture.sample;
\r
3 import java.awt.Canvas;
\r
4 import java.awt.Graphics;
\r
5 import java.awt.image.BufferedImage;
\r
6 import java.awt.image.DataBuffer;
\r
7 import java.awt.image.WritableRaster;
\r
9 import javax.swing.JFrame;
\r
11 import jp.digitalmuseum.capture.AbstractVideoCapture;
\r
12 import jp.digitalmuseum.capture.VideoCaptureDummy;
\r
13 import jp.digitalmuseum.capture.VideoCaptureListener;
\r
14 import jp.digitalmuseum.capture.VideoCaptureQT;
\r
17 class MyFrame extends JFrame {
\r
18 private AbstractVideoCapture capture;
\r
19 private WritableRaster raster;
\r
20 private BufferedImage image;
\r
24 capture = new VideoCaptureQT(Const.CAP_WIDTH, Const.CAP_HEIGHT);
\r
26 capture.prepSetInput(null);
\r
30 } catch (Exception e) {
\r
31 e.printStackTrace();
\r
32 capture = new VideoCaptureDummy(Const.CAP_WIDTH, Const.CAP_HEIGHT);
\r
36 // ダミーすら初期化できなかったら終了
\r
37 } catch (Exception e1) {
\r
38 e1.printStackTrace();
\r
44 MyCanvas canvas = new MyCanvas();
\r
45 canvas.setSize(capture.getWidth(), capture.getHeight());
\r
46 capture.addVideoCaptureListener(canvas);
\r
51 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
\r
53 setResizable(false);
\r
60 public void dispose() {
\r
65 class MyCanvas extends Canvas implements VideoCaptureListener {
\r
69 public void paint(Graphics g) {
\r
71 g.drawImage(image, 0, 0, null);
\r
73 public void repaint(Graphics g) { paint(g); }
\r
74 public void update(Graphics g) { paint(g); }
\r
79 public void imageUpdated(byte[] pixels) {
\r
80 // 実データを画像オブジェクトに変換する準備
\r
81 if (raster == null) {
\r
82 raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
\r
83 capture.getWidth(), capture.getHeight(),
\r
84 capture.getWidth()*3, 3,
\r
85 new int[] { 0, 1, 2 }, null);
\r
86 image = new BufferedImage(capture.getWidth(), capture.getHeight(),
\r
87 BufferedImage.TYPE_3BYTE_BGR);
\r
91 raster.setDataElements(0, 0, capture.getWidth(), capture.getHeight(), pixels);
\r
92 image.setData(raster);
\r