Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: BufferedImagen lähettäminen soketilla

Sivun loppuun

Triton [02.05.2011 14:38:31]

#

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

Jokotai [02.05.2011 15:06:14]

#

Mikset muka voisi lähettää sitä raakadatana sarjaporttiin?

Metabolix [02.05.2011 15:08:01]

#

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.

Triton [02.05.2011 15:32:44]

#

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...

Metabolix [02.05.2011 15:43:14]

#

Mikä muistivuoto? Jos JVM:ssä tai Javan kirjastojen toteutuksessa on muistivuoto, lähetä siitä bugiraportti. Muussa tapauksessa korjaa sanastosi.

Triton [02.05.2011 20:11:29]

#

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?

Triton [03.05.2011 00:11:54]

#

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

etsubu [06.05.2011 19:24:20]

#

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.

Triton [06.05.2011 23:37:22]

#

Kiitos, täytyy kokeilla...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta