GTK és jpeg internetről megjelenitése

 ( igiboy | 2007. október 15., hétfő - 21:26 )

Lenne egy program ,amiben kérném az elinduláshoz egy kis segítségetek.

A program internetről tőltene le jpeg képet, megadott időközönként, pl. 100ms-ként. Nem nagyon tudom hogy honnan is kezdjek hozzá. Valaki valami segítséggel egy pár infóval megdobhatna. Ha megoldható GTK-ban menne a dolog.

Válaszokat előre is köszi!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Azért ennyire ne tolongjatok. :)
Nem a program megirására gondoltam, hanem valami infó hogy mégis milyen függvények tájékán érdemes turkálni hogy célhoz érjek.

Socket programozás, meg vmi iesmi kell neked sztem: http://library.gnome.org/devel/gtk/2.12/GtkImage.html

aztán a kettőt tedd össze ;] Amúgy mileszez? Valami webkamerás téma?

Igen valami webkamerás dolog. Jó a megérzés, csak mondjuk a webkamerától egy kicsit komolyabb dologra kell.
Azt már el tudtam érni hogy megjelenjen egy valami.jpg ami a gépemen van.
Csakhogy nekem az kellene hogy a http://user:pass@192.168.1.111/valami.jpg legyen megjelenítve.

Háth az úgy elég lassú ugye, hogy mindig leírod vinyóra, aztán onnan megjeleníted, főleg az ilyen gyors frissítés mellett.. Próbáld felolvasni vmi bufferbe, aztán van ilyesmi a linken amit adtam: gtk_image_set_from_pixbuf(GtkImage *image,GdkPixbuf *pixbuf); Vagy valami hasonlót keress

Én is gondoltam egy "temp" fájlra, de ez sok kamerával menne, és állandóan kerregtetné a vinyót igy.
A másik ami igy most eszembe jutott, hogy valahogy letöltöm a jpeg-et és ezt memóriában tárolom, majd innen használom. Valahogy meg utánnanézek hogy is tudnám megszerezni azt a bizonyos fájlt a hálózaton keresztül, HTTP GET, stb...

Ebből tanultam énis a socketprogramozás alapjait: http://people.inf.elte.hu/triasz/progi/bgnet.html

Kössssz az infókat.
Jó anyagnak tűnik.

Ha Gtk-ban csinálod, akkor miután létrejött a kapcsolat, érdemes GIOChannel-t csinálni a socketből, es a kép betöltéséhez használhatsz GdkPixbufLoader-t.

Vagy használhatod a libghttp-t is, és akkor nem kell socket kezeléssel bajlódni elvileg, bár én ezt még nem próbáltam:
http://www.fifi.org/doc/libghttp1/ghttp.html

Vagy curl-t, httpre.

"Tedd vagy ne tedd, de ne probáld"

Vagy GNet, és ő még "szereti" is a GLib -et. :)

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."

Http protokollt az elejétől nem érdemes megírni kézzel. Pl van ez a Javás cucc (Hálózat lesz a szűk keresztmetszet, nem a gép szerintem):

http://jakarta.apache.org/httpcomponents/httpclient-3.x/

Az alap get hívás egyszerű, arra van az oldalon tutorial. A beléptetés nekem már nem ment könnyen, meg az alapértelmezett USER_AGENT-tel nem engedte be a weboldal, ezért én kb ezzel a kódrészlettel léptetem be a felhasználómat.

hc=new HttpClient();
HttpClientParams hcp=hc.getParams();
hcp.setParameter(HttpMethodParams.USER_AGENT, "Mozilla");
hcp.setParameter(HttpClientParams.HTTP_CONTENT_CHARSET, "UTF-8");
hc.setParams(hcp);
{
PostMethod method=new PostMethod(belepooldal urlje);
method.addParameter("username",user);
method.addParameter("password",pass);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
hc.executeMethod(method);
}

Amúgy ha admin jogod van a futtató gépen, akkor én lehet, hogy inkább csinálnék egy memória fájlrendszert és abba dolgoznék. Így standard eszközöket tudsz használni, mégse kerreg a vinyód.
Ha a HttpClient osztállyal Javában csinálod, akkor a sessiont fenntarthatod sokáig, így nem kell folyton úrja belépni, amit pl a wget megtenne.

Erre találták ki a server-push -t a cambozola java applet -el megy.

Persze ez a kép webszerverről való letöltésére használható.

Mindenképpen "rendes" program kell, nem valami java, ami gép erőforrásainak javát felzabálja. És vannak egyedi igények. De szerintem msn, ezt beszéltem is veled.

Én ezzel vitatkoznék. Szerintem egy Java program is rendes program. Egy yól megírt java program nem erőforrászabáló, egy rosszul megírt az. Ellenben a java tartalmaz beépített támogatást hálózaton keresztüli képek megjelenítésére winyóra töltés nélkül. Nativan.

Végülis odáig eljutottam hogy átmegyek az authentikáción, HTTP-vel letöltöm a jpeg fájlomat. Egy string-ként át tudnám adni akárminek. Pl. most valóban egy fájlt készit a programom.

A JPG megjelenítése is meg, csak annyi a gond vele hogy csak fájlból akarja felszivni.
Milyen megoldással lehet a fájlnyitogatás helyett adni neki egy memóriacímet hogy onnan olvassa a tartalmat ne pedig a fájlból?

Másik problémám hogy már talán az összes létező függvényt kipróbáltam, de nem tudtam frissíteni az egyszer már betöltött képet.

Valahogy igy töltődik be...:
image1 = gtk_image_new_from_file ("/ramdisk/proba0.jpg");
gtk_widget_set_name (image1, "image1");
gtk_widget_show (image1);

Mivel lehet frissítésre birni???

UI.: mostmár jó álmos is vagyok, és lehet hogy holnap napközben nem lesz áram a környékemen, mert valami trafót cserélgetnek. Szóval a tippeket várom, amint tudom meg is nézem, hogy megy e.

Én itt néznék körül:
http://developer.gimp.org/api/2.0/gtk/GtkImage.html#gtk-image-new-from-pixbuf

Amugy a forrás publikus?

Nem "publikus" lesz, nem lesz fent xy oldalon egyenlőre, de akinek kell annak odaadom. Főleg akikkel beszélgettem az ügyben.