bonjour je dois realiser un programme en java permetant de faire une acquisition video au moyen d'une webcam et de superposer sur cette image diferents textes et formes(carrés, triangle, ligne...) qui evoluent au cours du temps afin de realiser une espece de HUD avec la ligne d'horizon, l'altitude et d'autres informations complementaires.

grace au petit programme ci dessous, j'arrive a faire l'acquisition video dont le type est component (nom de la variable: comp)
et je veut y supperposer ma methode g de type graphics (pour faire les premiers essais ce sont des textes qui n'evoluent pas dans le temps que j'ai decidé de faire afficher afin de rendreles choses plus claires)

je precise aussi que l'affichage de l'acquisition video et de la methode de dessin fonctionnent tres bien separement seulent quand je veut supperposer les 2 je ne vois que ce qui provient de ma camera et pas de mon dessin.

le probleme viendrait il du fait que ce n'est pas les memes type (component / graphics ) ou serais ce ma video qui serais affiché devant les dessins??? ou peut etre bien les 2

je vous remercie d'avance pour vos reponses.

ci dessous voici mon code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
 
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileOutputStream;
 
import javax.media.CaptureDeviceInfo;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.swing.JButton;
import javax.swing.JComponent;
 
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
//import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.lang.*;
import java.awt.Component.*;
 
 
public class Hud extends Panel implements ActionListener   
{ 
    public static Player player = null; 
    public CaptureDeviceInfo di = null; 
    public MediaLocator ml = null; 
    public JButton quit = null;
    public Image img = null; 
    public VideoFormat vf = null;  
 
    public Hud()   
    { 
    setLayout(new BorderLayout());  // definition d'une nouvelle fenetre 
    setSize(800,600);  				// et de sa taille
 
    quit = new JButton("Quit"); 	// definition du bouton quit
    quit.addActionListener(this);	//
 
 
    String str1 = "vfw:Video Blaster Webcam Go (VFW):1"; // les drivers de ma webcam
    ml = new MediaLocator("vfw://0"); 
 
    try 
    	{ 
        player = Manager.createRealizedPlayer(ml); 
        player.start(); 
        Component comp; 
 
        if ((comp = player.getVisualComponent()) != null) 
        	{ 
          add(comp,BorderLayout.CENTER); // comp = la video a afficher
 
        Graphics g = player.getVisualComponent().getGraphics();   // appel de la fonction qui dessine
        aff( g );												  // mon HDU (marche pas la supperposition)
 
        	} 
 
        add(quit,BorderLayout.SOUTH); 	// ajoute le bouton quit a la fenetre
 
    	}   
 
    catch (Exception e) 
    	{ 
        e.printStackTrace(); 
    	} 
    }
 
    public static void aff(Graphics g) 	// methode qui dessine mon HUD
	 {									// avec les differents elements
 
		Graphics2D g2 = (Graphics2D)g;
 
		Font Arial= new Font("Arial",Font.PLAIN,25);
		g2.setFont(Arial);
 
		g2.setPaint(Color.green);
 
		g2.drawString("Altitude :           m" ,15,25);
		g2.drawString("Vitesse :           m/s",15,500);
 
		g2.drawLine(0,300,800,300);
 
	 }
 
    public static void main(String[] args)  	 
	{
    Frame f = new Frame("H.U.D."); 			// titre de la fenetre
    Hud cf = new Hud(); 
 
    f.addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent e) { 
    playerclose(); 
    System.exit(0);}}); 
 
    f.add("Center",cf); 		// positionnement de la cam
    f.pack(); 
    f.setSize(new Dimension(800,600)); //definiton de sa taille
    f.setVisible(true); 
    } 
 
    public static void playerclose()    // pour fermer le fenetre 
    { 									// avec la croix
    player.close(); 					// (il me semble!)
    player.deallocate(); 				//
    } 
 
    public void actionPerformed(ActionEvent e)  
    { 
    JComponent q = (JComponent) e.getSource(); 
 
    if (q == quit)   	// pour fermer 
    { 					//
    playerclose(); 		// la fenetre avec 
    System.exit(0);		// le bouton quit
    }
    } 
 
}