2009-08-13 11 views
1

私はウェブカメラからストリームをキャプチャしており、ビデオ画像の上に何かを描画したいと考えています。下の例では、問題は、どのようにコンポーネントを配置しても、他のコンポーネントは常にバックグラウンドにあるということです。 これを解決する方法はありますか?JMFコンポーネントのペイント

public class SwingCapture extends JPanel { 

private static final long serialVersionUID = -1284686239737730338L; 
private static Player player = null; 
public static final int WIDTH = 640; 
public static final int HEIGHT = 480; 
private MediaLocator ml = null; 

public SwingCapture() 
{ 
    setLayout(null); 
    setSize(WIDTH, HEIGHT); 

    ml = new MediaLocator("vfw:Microsoft WDM Image Capture (Win32):0"); 
    try { 
     player = Manager.createRealizedPlayer(ml); 
     player.start(); 

     Component comp = null; 
     if ((comp = player.getVisualComponent()) != null) { 
      add(comp); 
      comp.setBounds(0, 0, 640, 480); 
     } 
     add(Canvas.getInstance()); 
     Canvas.getInstance().setBounds(0, 0, 640, 480); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

public static void playerclose() { 
    player.close(); 
    player.deallocate(); 
} 
} 

答えて

2

私はこの問題を解決しました。私はManager.setHint(Manager.LIGHTWEIGHT_RENDERER、true)を使用しました。 とJLayerPane。

public class SwingCapture extends JPanel { 
private static final long serialVersionUID = -1284686239737730338L; 
public static Player player = null; 
public static final int WIDTH = 640; 
public static final int HEIGHT = 480; 
public MediaLocator ml = null; 

public SwingCapture() { 
    setLayout(null); 
    setSize(WIDTH, HEIGHT); 
    JLayeredPane jLP = new JLayeredPane(); 
    jLP.setBounds(0,0,800,600); 
    ml = new MediaLocator("vfw:Microsoft WDM Image Capture (Win32):0"); 
    try { 
     Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); 
     player = Manager.createRealizedPlayer(ml); 
     player.start(); 
     jLP.add(Canvas.getInstance()); 
     Canvas.getInstance().setBounds(0, 0, 200, 200); 
     Component comp = null; 
     if ((comp = player.getVisualComponent()) != null) { 
      jLP.add(comp, -1); 
      comp.setBounds(0, 0, 640, 480); 
     } 

     add(jLP); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void playerclose() 
{ 
    player.close(); 
    player.deallocate(); 
} 
} 
関連する問題