Probleme ente 2 types: Graphics / Component [Debutant]

Probleme ente 2 types: Graphics / Component [Debutant] - Java - Programmation

Marsh Posté le 05-01-2005 à 16:39:56    

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


Message édité par devil02 le 12-01-2005 à 20:10:14
Reply

Marsh Posté le 05-01-2005 à 16:39:56   

Reply

Marsh Posté le 10-01-2005 à 09:39:45    

apres quelques recherches je me suis apercu que l'utilisation d'un JLayeredPane avec plusieurs couches (une pour la video et l'autre pour les textes) s'avererait la meilleure solution.
seulement, je ne sais pas trop comment l'utiliser, j'ai fait des recherches sur le net, j'ai trouvé pas mal de resulatats mais je n'arrive pas a assimiler ces notions.
si quelqu'un se sent capable d'essayer de m'expliquer l'essentiel ou connait de bon tutos merci de me contacter soit sur ce topic soit par message privé ou alors directement sur ma boite mail : devil02toulouse@hotmail.com
 
merci d'avance

Reply

Marsh Posté le 12-01-2005 à 15:46:23    

personne ne sait comment faire?svp c'est super important pour un stage et je suis bloqué, je ne demande pas qu'on fasse mon satge a ma place je veut y arriver seul, j'ai juste besoin d'un ptit coup de pouce.
 
merci

Reply

Marsh Posté le 29-03-2005 à 12:54:00    

Bonjour j'aurais voulu savoir si tu avais reussi a réglé ton probleme moi j'arrive a utiliser les JLayeredPane mais le player de la camera se met toujours au premier plan

Reply

Marsh Posté le 25-04-2005 à 14:28:45    

Si l'affichage du player est un composant lourd (c'est affiché nativement). Tu ne peux pas dessiner par dessus avec java. Le seul truc que tu peux mettre par dessus, c'est un composant lourd, mais avec java, ca me semble difficile.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed