2009-08-13 9 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(); 
} 
}