OSDN Git Service

キャプチャに使える汎用パッケージをインポート。
[nyartoolkit-and/nyartoolkit-and.git] / branches / arc / src / jp / digitalmuseum / capture / sample / MyFrame.java
1 package jp.digitalmuseum.capture.sample;\r
2 \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
8 \r
9 import javax.swing.JFrame;\r
10 \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
15 \r
16 \r
17 class MyFrame extends JFrame {\r
18         private AbstractVideoCapture capture;\r
19         private WritableRaster raster;\r
20         private BufferedImage image;\r
21 \r
22         public MyFrame() {\r
23                 // QuickTimeでキャプチャ\r
24                 capture = new VideoCaptureQT(Const.CAP_WIDTH, Const.CAP_HEIGHT);\r
25                 try {\r
26                         capture.prepSetInput(null);\r
27                         capture.start();\r
28 \r
29                 // 失敗したらダミーでキャプチャ\r
30                 } catch (Exception e) {\r
31                         e.printStackTrace();\r
32                         capture = new VideoCaptureDummy(Const.CAP_WIDTH, Const.CAP_HEIGHT);\r
33                         try {\r
34                                 capture.start();\r
35 \r
36                         // ダミーすら初期化できなかったら終了\r
37                         } catch (Exception e1) {\r
38                                 e1.printStackTrace();\r
39                                 dispose();\r
40                         }\r
41                 }\r
42 \r
43                 // キャンバスの初期化\r
44                 MyCanvas canvas = new MyCanvas();\r
45                 canvas.setSize(capture.getWidth(), capture.getHeight());\r
46                 capture.addVideoCaptureListener(canvas);\r
47                 add(canvas);\r
48                 pack();\r
49 \r
50                 // メインウィンドウの初期化\r
51                 setDefaultCloseOperation(DISPOSE_ON_CLOSE);\r
52                 setTitle("sample");\r
53                 setResizable(false);\r
54                 setVisible(true);\r
55         }\r
56 \r
57         /**\r
58          * 終了処理\r
59          */\r
60         public void dispose() {\r
61                 capture.dispose();\r
62                 System.exit(0);\r
63         }\r
64 \r
65         class MyCanvas extends Canvas implements VideoCaptureListener {\r
66                 /**\r
67                  * キャプチャ画像の描画\r
68                  */\r
69                 public void paint(Graphics g) {\r
70                         if (image != null)\r
71                                 g.drawImage(image, 0, 0, null);\r
72                 }\r
73                 public void repaint(Graphics g) { paint(g); }\r
74                 public void update(Graphics g) { paint(g); }\r
75 \r
76                 /**\r
77                  * キャプチャ画像のオブジェクト化\r
78                  */\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
88                         }\r
89 \r
90                         // 実データを画像オブジェクトに変換\r
91                         raster.setDataElements(0, 0, capture.getWidth(), capture.getHeight(), pixels);\r
92                         image.setData(raster);\r
93                         repaint();\r
94                 }\r
95 \r
96         }\r
97 \r
98 }\r