2009-08-13 5 views
1

Je capture le flux à partir d'une webcam et j'aimerais dessiner quelque chose au-dessus de l'image vidéo. Je tente que dans l'exemple ci-dessous, le problème est que l'autre composant est toujours en arrière-plan, peu importe comment j'arrange les composants. Y at-il un moyen de résoudre ce problème?Peinture au-dessus du composant 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(); 
} 
} 

Répondre

2

J'ai résolu le problème. J'ai utilisé un Manager.setHint (Manager.LIGHTWEIGHT_RENDERER, true); et un 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(); 
} 
}