[Debutant] Probleme ente 2 types: Graphics / Component
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 :cry:
je vous remercie d'avance pour vos reponses.
ci dessous voici mon code
Code:
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
}
}
} |