Mikä olisi paras tapa lähettää BufferedImage sokettia pitkin toiseen koneeseen? BufferedImage, kun ei satu olemaan serialisoitava, niin sitä ei ainakaan suoraan ObjectOutputStreamillä pysty lähettämään...
Edit. Tarkoituksena on lähettää kuvia tiheään tahtiin ja mahdollisimman nopeasti
Mikset muka voisi lähettää sitä raakadatana sarjaporttiin?
Luokka javax.imageio.ImageIO sisältää välineet kuvan kirjoittamiseen ja lukemiseen.
Jos kuvat ovat hyvin lähellä toisiaan (esim. ohjelman käyttöliittymä eri hetkillä), kokonaisten kuvien lähettäminen ei yleensä ole käytännöllistä, ellei käytössä ole hyvin nopea verkko.
Jokotaille suosittelen aktiivisempaa järjen käyttöä ennen vastaamista – niin tässä kuin muissakin keskusteluissa. Eipä ollut nytkään mistään sarjaportista kyse, ja jos Triton saisi kuvan edes raakadataksi (ja takaisin), lähettäminen ei varmaan olisi mikään ongelma.
Kiitos vastauksesta. Itse asiassa satuin löytämäänkin ImageIO:n Javan apista jonkun aikaan viestin lähettämisen jälkeen. Toiseksi ratkaisuksi keksin muuttaa BufferedImagen ImageIconiksi, joka taas on serialisoitava jolloin pystyin lähettämään tuon kuvan käyttämällä tuota ObjectOutputStream-luokkaa.
Olen tekemässä harjoittelun vuoksi VNC-ohjelmaa ja lähinnä tässä on ongelmaksi muodostunut screenshottien lähettäminen verkon yli, sillä jos kuvasta haluaa reaaliaikaista, niin muistivuoto tapahtuu hyvin nopeasti. Näin ollen mietinkin, että mikä on paras tapa loppujen lopuksi image-datan lähettämiseen, jottei ohjelma pääse kaatumaan. Input-laitteiden simulointi taas onnistuukin todella yksinkertaisesti käyttämällä Robot-luokkaa...
Mikä muistivuoto? Jos JVM:ssä tai Javan kirjastojen toteutuksessa on muistivuoto, lähetä siitä bugiraportti. Muussa tapauksessa korjaa sanastosi.
Joo, olet oikeassa, ei kysymys ollut muistivuodosta, vaan siitä ohjelma käyttää muistia enemmän kuin sallitut 128 MB:tä. Kysymys kuuluukin niin, että miten korjata ongelma, ja onko olemassa jotain parempaa tapaa "työpöydän" lähettämiseen, kuin screenshottien lähettäminen BufferedImage-olioina?
Metabolix kirjoitti:
Jos kuvat ovat hyvin lähellä toisiaan (esim. ohjelman käyttöliittymä eri hetkillä), kokonaisten kuvien lähettäminen ei yleensä ole käytännöllistä, ellei käytössä ole hyvin nopea verkko.
Ratkaisu taisikin löytyä yllä olevasta lauseesta... :D
Rectangle r=new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage f = robot.createScreenCapture(r); ImageIcon i=new ImageIcon(f); f.flush(); try { salida.writeObject(i); salida.flush(); salida.reset(); } catch (IOException e) { e.printStackTrace(); }
Tuossa on pätkä jota itse olin käyttänyt aikoinaan käyttänyt kuvien lähettelyyn javalla.
Salida on siis ObjectOutputStream.
HUOM. kuvan lähetyksen jälkeen PITÄÄ kutsua .reset();
sillä muuten saat lähetettyä kuvia vain n.7 kpl ennen kuin ohjelma kaatuu.
Toivottavasti auttaa.
Kiitos, täytyy kokeilla...
Aihe on jo aika vanha, joten et voi enää vastata siihen.