Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19

    [JAVA] inviare immagine

    ciao a tutti, io dovrei inviare uno screenshot da client verso il server, sono riuscito a crearmi un oggetto BufferedImage e a catturare l'immagine ma non riesco a capire come spedirla, visto che BufferedImage non è serializzabile qualcuno sa aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] inviare immagine

    Originariamente inviato da seibi
    ciao a tutti, io dovrei inviare uno screenshot da client verso il server, sono riuscito a crearmi un oggetto BufferedImage e a catturare l'immagine ma non riesco a capire come spedirla, visto che BufferedImage non è serializzabile qualcuno sa aiutarmi?
    Infatti non devi serializzare l'oggetto XYZImage in sé (che come hai visto comunque tecnicamente non è possibile, non essendo Serializable).

    Devi scrivere lo stream di dati codificato in uno dei formati standard, gif, png ecc... Vedi la classe javax.imageio.ImageIO e i suoi write(), in particolare quello che riceve un OutputStream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    però nel campo renderedImage cosa gli passo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    ma che tipo di OutputStream/InputStream devo usare??? ObjectInputStream/ObjectOutputStream vanno bene?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da seibi
    però nel campo renderedImage cosa gli passo?
    BufferedImage è-un RenderedImage.

    Originariamente inviato da seibi
    ma che tipo di OutputStream/InputStream devo usare??? ObjectInputStream/ObjectOutputStream vanno bene?
    No, gli ObjectXXXStream sono per la "serializzazione" degli oggetti, dimenticali in questi caso perché non ti serve la serializzazione (se ti servisse per altro non lo so ... ma non di certo per le immagini).

    Parli di comunicazione client-server (che non hai precisato nei dettagli) ... di cosa parli? Comunicazione attraverso socket usando un tuo "protocollo" che hai pensato tu? O di una request su HTTP ad un web server? O altro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    la comunicazione attraverso client-server avviene attraverso socket

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da seibi
    la comunicazione attraverso client-server avviene attraverso socket
    Sì ma non vuol dire ancora nulla di chiaro/preciso! Su una porta specifica con un tuo "protocollo" di comunicazione? Per "protocollo" qui si intende, per dirla in modo semplice, una specifica che descrive cosa i due host devono inviare (in quale formato e sequenza) e si devono aspettare dall'altro man mano che la comunicazione prosegue.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    prima cosa grazie per l'aiuto...

    allora ho fatto qualche progresso, vediamo se riesco a farti capire meglio la situazione...

    il client si connette al server tramite socket, il server richiede lo screenshot al client, che lo cattura, lo inserisce in un oggetto BufferedImage, apre una BufferedOutputStream sulla socket già utilizzata per la connessione (e sfruttata anche per altre richieste fatte dal server verso il client) Client/Server e lo invia tramite una ImageIO.write .
    Il server apre a sua volta un canale BufferedInputStream sulla socket già usata per la connessione e riceve tramite una ImageIO.read.

    il problema è che se dopo la write sul client metto una flush() e un close() sul canale BufferedOutputStream tutto funziona ma mi chiude anche la socket che deve rimanere aperta per ricevere altre richieste

    mentre se non metto la close() non arriva lo screenshot...

    spero di essere stato chiaro...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da seibi
    il problema è che se dopo la write sul client metto una flush() e un close() sul canale BufferedOutputStream tutto funziona ma mi chiude anche la socket che deve rimanere aperta per ricevere altre richieste
    Banalmente fai il flush ma non il close (se non alla fine). E anzi ... potresti usare il BufferedOutputStream per tutto quanto, non solo per la immagine, facendo ovviamente i flush nei punti giusto per assicurarti che comandi/dati/immagini/ecc siano inviati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.