elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla  (Leído 4,351 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
[SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« en: 6 Agosto 2010, 13:04 pm »

Buenas a todos, programando un regalito para el foro y la comunidad, ha nacido un source bastante interesante!

Queria realizar capturas en un equipo remoto, y convertirlas a un arreglo de bytes para luego enviarlas (si queremos fragmentado :D) para luego reconstruirlo en el pc remoto:

Realizando la captura:

Código
  1. public static File getScreenShot()
  2. {
  3. String fileName="/root/captura01.png";
  4. Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  5. Rectangle screenRectangle = new Rectangle(screenSize);
  6. Robot robot = null;
  7. try {
  8. robot = new Robot();
  9. } catch (AWTException e2) {
  10. // TODO Auto-generated catch block
  11. e2.printStackTrace();
  12. }
  13. BufferedImage image = robot.createScreenCapture(screenRectangle);
  14. try {
  15. ImageIO.write(image, "png", new File(fileName));
  16. } catch (IOException e1) {
  17. // TODO Auto-generated catch block
  18. e1.printStackTrace();
  19. }
  20.  
  21. //----
  22.  
  23. try
  24. {
  25.  
  26.  
  27.  
  28. robot.createScreenCapture(screenRectangle);
  29.  
  30. }
  31. catch(Exception e)
  32. {
  33. e.printStackTrace();
  34. }
  35. File imageFile = new File(fileName);
  36.  
  37. return imageFile;
  38.  
  39. }

Obteniendola y escribiendo a un arreglo de bytes:

Código
  1. File captura = null;
  2. captura = funciones.getScreenShot();
  3.  
  4. try {
  5. InputStream is = new FileInputStream(captura);
  6. long length = captura.length();
  7. if (length > Integer.MAX_VALUE) {
  8.        System.out.println("El archivo es demasiado grande!");
  9.    }
  10.  
  11.    // Create the byte array to hold the data
  12.    byte[] bytes = new byte[(int)length];
  13.  
  14.    // Read in the bytes
  15.    int offset = 0;
  16.    int numRead = 0;
  17.    while (offset < bytes.length
  18.           && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
  19.        offset += numRead;
  20.    }
  21.  
  22.    // Ensure all the bytes have been read in
  23.    if (offset < bytes.length) {
  24.        throw new IOException("No se puede leer completamente el archivo "+captura.getName());
  25.    }
  26.  
  27.    // Close the input stream and return bytes
  28.    is.close();

Y ahora tratandola, por ejemplo enviarla:
Código
  1. Socket cliente = new Socket("localhost",666);
  2. DataOutputStream os = new OutputStream(cliente.getOutputStream());
  3. for(int i = 0; i < bytes.length; i++)
  4. {
  5. os.write(bytes[i]);
  6. S}
  7.  
Y los vamos reciviendo recursivamente (muy parecido a lo anterior)

Y ahora lo escribimos a un fichero:
Código
  1.                  File imagenFinal = new File("/root/imagencopiada.jpg");
  2.      FileOutputStream fileNuevo = new FileOutputStream(imagenFinal);
  3.      fileNuevo.write(bytes);
  4.  

Y habremos transferido nuestra imagen!


Saludos


En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #1 en: 6 Agosto 2010, 17:04 pm »

En mi opinion:
Muy Engorroso, que quieres que te diga. Usuaria esta opción si solo si no tuviera memoria.
Por que no pruebas en vez de enviarlo a un archivo lo envias e un ByteOutputStream? y luego envias ese ByteOutputStream por socket.
Todo lo demás esta muy bien y muy bien hecho.

Revisa este mensaje:
http://foro.elhacker.net/java/enviar_un_bufferedimage_a_travez_de_socket-t177615.0.html;msg845781#msg845781

Saludos


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #2 en: 6 Agosto 2010, 17:39 pm »

En mi opinion:
Muy Engorroso, que quieres que te diga. Usuaria esta opción si solo si no tuviera memoria.
Por que no pruebas en vez de enviarlo a un archivo lo envias e un ByteOutputStream? y luego envias ese ByteOutputStream por socket.
Todo lo demás esta muy bien y muy bien hecho.

Revisa este mensaje:
http://foro.elhacker.net/java/enviar_un_bufferedimage_a_travez_de_socket-t177615.0.html;msg845781#msg845781

Saludos
Se agradece jeje, que dedique mi tiempo libre a esto y de sus frutos.

Ahora compruebo lo que me comentaste.

Saludos
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #3 en: 6 Agosto 2010, 20:43 pm »

Sabian que se puede enviar una imagen por sockes con tan solo 4 lineas y recibirla en 4 tambien, No se por que se complican :xD
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #4 en: 6 Agosto 2010, 21:04 pm »

Sabian que se puede enviar una imagen por sockes con tan solo 4 lineas y recibirla en 4 tambien, No se por que se complican :xD
Mmm yo es que soy muy cutre y me complico mucho la vida, como sugieres que lo haga?

Saludos
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #5 en: 6 Agosto 2010, 21:39 pm »

Primero eso de escribirla y leerla como archivo es innecesario

Puedes hacer todo internamente es decir

Código
  1. java.awt.image.BufferedImage bufferedImage=new java.awt.Robot().createScreenCapture(new java.awt.Rectangle(
  2. Toolkit.getDefaultToolkit().getScreenSize()));
  3.  

Y la envias con ImageIO, segun el API de este

Código:
static boolean write(RenderedImage im, String formatName, OutputStream output)

Puedes especificarle un OutputStream en este caso sera el OutputStream del Socket.

Example
Código
  1. javax.imageio.ImageIO.write(bufferedImage, "png",socket.getOutputStream());

Ya con eso se enviaría correctamente.

Y para recibirla en el Servidor puedes hacerlo tambien con ImageIO

Código:
static BufferedImage	read(InputStream input) 

Example:
Código
  1. BufferedImage b = ImageIO.read(socket.getInputStream());
  2. ImageIO.write(b, "png", new File("Screenshot.png"));

y asi tendrias 4 lineas para enviar y 4 para recibir una imagen ;)

Un saludo.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [SOURCE]Capturando imagen y enviandola por sockets para reconstruirla
« Respuesta #6 en: 6 Agosto 2010, 21:46 pm »

Ya veo jeje, todavia soy un padawan maestro jeje

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Source] Carrousel Round About - Carrusel con imagen en el centro y giro 3D
Desarrollo Web
Graphixx 0 1,838 Último mensaje 17 Diciembre 2012, 22:14 pm
por Graphixx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines