Painting over JMF component

匿名 (未验证) 提交于 2019-12-03 08:30:34

问题:

I'm capturing the Stream from a webcam and would like to draw something on top of the video image. I try that in the example below, the problem is that the other component is always in the background no matter how I arrange the components. Is there a way do solve this?

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(); } } 

回答1:

I have solved the problem. I used a Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); and a 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();  } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!