G
Guest
Gast
Hallo an alle,
habe die letzten zwei Tage das Internet und diverse Foren hin und her gewälzt um dieses Problem zu lösen, und komme jetzt einfach nicht weiter. Das Thema wurde auch hier schon das eine oder andere Mal besprochen. Ich konnte auch schon einige Sachen anwenden und einbauen - aber schlussendlich gehts trotzdem nicht :-/
Was ich will:
Ich habe ein Video, das ich vom Jave Media Framework erhalte zur Anzeige gebracht. Über das Video soll eine Kamerasteuerung (schwenke jetzt bitte nach links) - das heißt am besten Buttons darüber, die mit transparenten Grafiken ausgestattet sind. Reicht aber auch, wenn einfach nur die Pfeile (Dreiecke, keine Quadrate - deswegen unbedingt Transparent) auf ein Panel oder JPanel oder so gezeichnet werden - ich kann den Klickereignissen über die Koordinaten schon irgendwie die richtige Aktion zuweisen.
Was funktioniert schon:
Code:
Aber prinzipiell sollte es ja funktionieren, auf ein Video etwas draufmalen zu können. Ich bin mir zwar sicher, dass ich alles hier getan habe, aber vielleicht hilft ja dieser thread aus dem sun-forum da sollte es wohl jemand geschafft haben. Vielleicht macht der es ja auch mit AWT - weil ich mir nicht vorstellen könnte, wie es anders gehen soll. Oder kann ich die Component, die ich mit getVisualComponent bekomme in irgendetwas umwandeln, wenn ich JMF auf LIGHTWEIGHT umgestellt habe?
forum.java.sun.com/thread.jspa?forumID=28&threadID=612055
Danke an Alle
habe die letzten zwei Tage das Internet und diverse Foren hin und her gewälzt um dieses Problem zu lösen, und komme jetzt einfach nicht weiter. Das Thema wurde auch hier schon das eine oder andere Mal besprochen. Ich konnte auch schon einige Sachen anwenden und einbauen - aber schlussendlich gehts trotzdem nicht :-/
Was ich will:
Ich habe ein Video, das ich vom Jave Media Framework erhalte zur Anzeige gebracht. Über das Video soll eine Kamerasteuerung (schwenke jetzt bitte nach links) - das heißt am besten Buttons darüber, die mit transparenten Grafiken ausgestattet sind. Reicht aber auch, wenn einfach nur die Pfeile (Dreiecke, keine Quadrate - deswegen unbedingt Transparent) auf ein Panel oder JPanel oder so gezeichnet werden - ich kann den Klickereignissen über die Koordinaten schon irgendwie die richtige Aktion zuweisen.
Was funktioniert schon:
- Video läuft
Transparente Grafik in Jpanel wird gezeichnet - ist aber weil es ne lightweight Componente ist natürlich hinter dem Video - klar
Ein Panel / Button aus java.awt kann ich auch über das Video legen - eben nur keine Transparenz möglich - da die ja heavyweight sind - auch klar
der Renderer vom JMF ist auf LIGHTWEIGHT_RENDERER umgestellt
um die Überlappung zu bekommen wurde ein JLayeredPane genutzt
Code:
Code:
public class MyFirstJMFApp implements ControllerListener, KeyListener{
private Player player;
public MyApp(){
player = null;
try {
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE);
player = Manager.createPlayer(new MediaLocator("file:C://video.avi"));
player.addControllerListener(this);
player.realize();
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void controllerUpdate(ControllerEvent e) {
if(e instanceof RealizeCompleteEvent && window == null){
JFrame frame = new JFrame();
JLayeredPane layeredPane = new JLayeredPane();
Component video = player.getVisualComponent();
video.setBounds(0, 0, 800, 600);
HeavyControlPanel control = new HeavyControlPanel();
control.setOpaque(false);
control.setBounds(0, 0, 800, 600);
layeredPane.add(video, new Integer(1));
layeredPane.add(control, new Integer(10));
frame.setBounds(0, 0, 801, 601);
frame.add(layeredPane);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
player.start();
}
}
Code:
public class HeavyControlPanel extends JPanel{
public HeavyControlPanel(){
}
public void paint(Graphics g){
int[] x = {10,50,10};
int[] y = {10,40,70};
int n = 3;
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.setColor(Color.red);
g2d.fillPolygon(x,y,n);
}
}
Aber prinzipiell sollte es ja funktionieren, auf ein Video etwas draufmalen zu können. Ich bin mir zwar sicher, dass ich alles hier getan habe, aber vielleicht hilft ja dieser thread aus dem sun-forum da sollte es wohl jemand geschafft haben. Vielleicht macht der es ja auch mit AWT - weil ich mir nicht vorstellen könnte, wie es anders gehen soll. Oder kann ich die Component, die ich mit getVisualComponent bekomme in irgendetwas umwandeln, wenn ich JMF auf LIGHTWEIGHT umgestellt habe?
forum.java.sun.com/thread.jspa?forumID=28&threadID=612055
Danke an Alle