récupérer une image sur un socket et l'afficher en plein écran

récupérer une image sur un socket et l'afficher en plein écran - Java - Programmation

Marsh Posté le 07-05-2012 à 11:22:35    

Salut à tous,
 
je commence par préciser que je ne suis PAS en train de faire mes devoirs.
 
Je dois écrire un programme qui ouvre un socket TCP sur un port fixé, récupère une image par ce socket et l'affiche en plein écran sur l'écran secondaire d'une machine. Je suis très loin d'être un expert en IHM (et en java d'ailleurs). Pour l'instant j'ai un bout de code qui me permet d'ouvrir le socket et de récupérer l'image :  
 

Code :
  1. public class test {
  2.     public static void main(String[] args) {
  3.  int listenPort = 25001;
  4.  try {
  5.   ServerSocket socket= new ServerSocket(listenPort);
  6.   Socket clientSocket = null;
  7.   while(true){
  8.      clientSocket = socket.accept();
  9.   InputStream input = clientSocket.getInputStream();
  10.   BufferedInputStream input_r = new BufferedInputStream(input);
  11.   byte[] message= new byte[5];
  12.   byte[] width_b = new byte[4];
  13.   byte[] length_b = new byte[4];
  14.   input.read(message,0,5);
  15.   input.read(length_b,0,4);
  16.   input.read(width_b,0,4);
  17.   int width = ByteBuffer.wrap(width_b).getInt();
  18.   int length = ByteBuffer.wrap(length_b).getInt();
  19.   String s = new String(message);
  20.   System.out.println("Message:" + s + " width:" + width + " length:" + length);
  21.   byte[][] data = new byte[length][width];
  22.   for(int i=0;i<length;i++){
  23.    input.read(data[i],0,width);
  24.   }
  25.   }
  26.  }
  27.  catch (IOException e) {
  28.      System.out.println("Accept failed: 4444" );
  29.      System.exit(-1);
  30.  }
  31. }
  32. }


 
et j'ai récupéré sur l'interweb un snippet qui fait la deuxième partie :  
 

Code :
  1. public class fullscreen extends JFrame {
  2.     // this line is needed to avoid serialization warnings   
  3.     private static final long serialVersionUID = 1L;
  4.     Image screenImage; // downloaded image   
  5.     int w, h; // Display height and width  
  6.     // Program entry  
  7.     public static void main(String[] args) throws Exception {
  8.         if (args.length < 1) // by default program will load AnyExample logo  
  9.             new fullscreen("http://www.anyexample.com/i/logo.gif" );
  10.         else
  11.             new fullscreen(args[0]); // or first command-line argument  
  12.     }
  13.     // Class constructor   
  14.     fullscreen(String source) throws MalformedURLException {
  15.         // Exiting program on window close  
  16.         addWindowListener(new WindowAdapter() {
  17.             public void windowClosing(WindowEvent e) {
  18.                 System.exit(0);
  19.             }
  20.         });
  21.         // Exitig program on mouse click  
  22.         addMouseListener(new MouseListener() {
  23.             public void mouseClicked(MouseEvent e) { System.exit(0); }
  24.             public void mousePressed(MouseEvent e) {}
  25.             public void mouseReleased(MouseEvent e) {}
  26.             public void mouseEntered(MouseEvent e) {}
  27.             public void mouseExited(MouseEvent e) {}
  28.         }
  29.         );
  30.         // remove window frame   
  31.         this.setUndecorated(true);
  32.         // window should be visible  
  33.         this.setVisible(true);
  34.         // switching to fullscreen mode  
  35.         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  36.    GraphicsDevice[] gs = ge.getScreenDevices();
  37.         gs[gs.length-1].setFullScreenWindow(this);
  38.         // getting display resolution: width and height  
  39.         w = this.getWidth();
  40.         h = this.getHeight();
  41.         System.out.println("Display resolution: " + String.valueOf(w) + "x" + String.valueOf(h));
  42.         // loading image   
  43.         if (source.startsWith("http://" )) // http:// URL was specified  
  44.             screenImage = Toolkit.getDefaultToolkit().getImage(new URL(source));
  45.         else
  46.             screenImage = Toolkit.getDefaultToolkit().getImage(source); // otherwise - file  
  47.     }
  48.     public void paint (Graphics g) {
  49.         if (screenImage != null) // if screenImage is not null (image loaded and ready)  
  50.             g.drawImage(screenImage, // draw it   
  51.                         w/2 - screenImage.getWidth(this) / 2, // at the center   
  52.                         h/2 - screenImage.getHeight(this) / 2, // of screen  
  53.                         this);
  54.             // to draw image at the center of screen  
  55.             // we calculate X position as a half of screen width minus half of image width  
  56.             // Y position as a half of screen height minus half of image height  
  57.     }
  58. }


 
Ma question est assez simple, comme je peux fusionner les deux?

Reply

Marsh Posté le 07-05-2012 à 11:22:35   

Reply

Marsh Posté le 10-05-2012 à 20:27:08    

sur les 76 qui ont vu le post, personne a aucune idée?

Reply

Marsh Posté le 22-05-2012 à 14:45:48    

Je mettrai le contenu du main de la classe test dans une méthode ImageUtils.provide() et renvoyant l'InputStream input.
 
Je modifierai la signature de fullscreen(String source) en fullscreen(InputStream input) et en modifiant le code avec
screenImage = javax.imageio.ImageIO(input);
 
Ensuite tu fais un programme principal qui dans le main fait un "new fullscreen(ImageUtils.provide);"
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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