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