2 * AbstractVideoCapture 1.02 08/07/15
4 * Copyright (c) 2008 arc
5 * http://digitalmuseum.jp/
8 package jp.digitalmuseum.capture;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.util.ArrayList;
16 * Webcamによるキャプチャを実行するクラスが拡張すべき抽象クラス。
18 * @version 1.01 5 June 2008
21 public abstract class AbstractVideoCapture implements ActionListener {
23 protected int width; // キャプチャ幅(指定した値から微妙にずれる)
24 protected int height; // キャプチャ高さ
25 protected float fps = 30; // キャプチャ画像を取得するfps
27 protected byte[] pixels; // キャプチャ画像の実データを保持するバイト型配列
30 public ArrayList<VideoCaptureListener> listeners = new ArrayList<VideoCaptureListener>();
33 public void addVideoCaptureListener(VideoCaptureListener listener) { listeners.add(listener); }
35 public void removeVideoCaptureListener(VideoCaptureListener listener) { listeners.remove(listener); }
37 /** 指定した幅、高さでインスタンスを初期化するコンストラクタ。 */
38 public AbstractVideoCapture(int w, int h) { setSize(w, h); }
40 /** 指定した幅、高さでのキャプチャを指示する。start()でキャプチャを開始した後は使えない。 */
41 public void setSize(int w, int h) { width = w; height = h; }
44 * Webcamの設定ダイアログを表示する。
45 * 既定のWebcamでは駄目な場合(複数のWebcamが接続されているPCなど)ではこれを実行するとよい。
47 public abstract void prepShowDialog() throws Exception;
50 * キャプチャに使う入力デバイスを指定する。
51 * デバイスの代わりにダミー(デバッグ用)としてFileオブジェクトも渡せる実装にしておくべきである。
53 public abstract void prepSetInput(Object device) throws Exception;
54 /** キャプチャするフレームレートを指定する。 */
55 public abstract boolean prepSetFramerate(float fps);
58 public abstract void start() throws Exception;
60 public abstract void dispose();
62 /** タイマー処理。キャプチャイメージの更新結果をリスナに伝える。 */
63 public void actionPerformed(ActionEvent event) { update(); }
65 /** リスナにキャプチャ結果を伝える */
66 public void update() {
68 for (VideoCaptureListener listener : listeners)
69 listener.imageUpdated(pixels);
72 /** キャプチャしている画像の幅を取得する。 */
73 public int getWidth() { return width; }
74 /** キャプチャしている画像の高さを取得する。 */
75 public int getHeight() { return height; }