GTK, glade, gdkpixbuf

GTK, glade, gdkpixbuf

Hozzászólások

A GTK.org-on amiket talaltam tutorialokat azok sehol sem ismertetik hogy a gdk-pixbufot hogy kell hasznalni, csak a fuggvenyeket soroljak fel.

Szia,

[quote:cd4d60c973="hygy"]A GTK.org-on amiket talaltam tutorialokat azok sehol sem ismertetik hogy a gdk-pixbufot hogy kell hasznalni, csak a fuggvenyeket soroljak fel.

A gdk-pixbuff-ra "direktben" akarsz rajzolni? Akarsz rajzoló alapműveleteket használni (vonal, kör, stb)?

Üdv: Bálint

[quote:17125aa318="hygy"]A GTK.org-on amiket talaltam tutorialokat azok sehol sem ismertetik hogy a gdk-pixbufot hogy kell hasznalni, csak a fuggvenyeket soroljak fel.

Ja, és szerintem a glade-et nem nagyon érdemes használni, én legalábbis sokkal gyorsabban haladtam nélküle, végülis elég profin van felépítve a gtk objektum-struktúra. És ha letöltöd a gtk forrást, abban van korekt doksi/tutorial is.

b.

[quote:de2750e56e="qzy"]Szia,

[quote:de2750e56e="hygy"]A GTK.org-on amiket talaltam tutorialokat azok sehol sem ismertetik hogy a gdk-pixbufot hogy kell hasznalni, csak a fuggvenyeket soroljak fel.

A gdk-pixbuff-ra "direktben" akarsz rajzolni? Akarsz rajzoló alapműveleteket használni (vonal, kör, stb)?

Üdv: Bálint

Igen. Direktben is. Szoval eloszor egy GPS konzolt szeretnek csinalni, ami megjeleniti a muholdakat, amiket a GPS-bol kiolvas, es persze a jelerosseget meg par ilyen informaciot.
Ehhez be kell tolteni egy JPG kepet, es egyik reszere szovegeket kell rajzolni a masik reszere meg koroket akarok tenni a korok reprezentaljak majd a muholdakat.
A kovetkezo pedig az lenne, hogy egy olyan kodot csinalni ami ki bir rajzolni egy terkepet, annak meg gyorsnak kell lennie.

HyGy

[quote:de5c0b6fab="hygy"]
Igen. Direktben is. Szoval eloszor egy GPS konzolt szeretnek csinalni, ami megjeleniti a muholdakat, amiket a GPS-bol kiolvas, es persze a jelerosseget meg par ilyen informaciot.
Ehhez be kell tolteni egy JPG kepet, es egyik reszere szovegeket kell rajzolni a masik reszere meg koroket akarok tenni a korok reprezentaljak majd a muholdakat.
A kovetkezo pedig az lenne, hogy egy olyan kodot csinalni ami ki bir rajzolni egy terkepet, annak meg gyorsnak kell lennie.

Mindjárt előbányászom a kódot, amivel én tudtam elegendően gyorsan rajzolni ahhoz, hogy egy méretes képen egy csík kövesse az egér mozgását (kicsit, mint a ruler widget-nél), csak most nem vagyok a gépem mellett.

Jpeg-et meg talán csuklóból is fel tudsz dobni a pixbuff-ra valami olyan hívással, ami file alapján inicializálja a struktúrát.

b.

b.

[quote:15ee10c490="qzy"]
Mindjárt előbányászom a kódot, amivel én tudtam elegendően gyorsan rajzolni ahhoz, hogy egy méretes képen egy csík kövesse az egér mozgását (kicsit, mint a ruler widget-nél), csak most nem vagyok a gépem mellett.

Jpeg-et meg talán csuklóból is fel tudsz dobni a pixbuff-ra valami olyan hívással, ami file alapján inicializálja a struktúrát.

Valahogy lehetett mert anno csinaltam vele egy olyan reklam csikot ami a kepernyo tetejen mukodott es bannereket forgatott. De mar nagyon regen volt a forrasat annak nem talaltam meg es nem is emlexem ra. De tudom hogy magat a jpg-t nem volt nagy szam kitenni.

Koszi

hygy@freemail.hu

[quote:95562fa056="hygy"]Talaltam valamit eleg jonak nez ki!

http://developer.gnome.org/doc/books/WGA/

HyGy

Aha, bár úgy tűnik, ez nem gtk/gdk, hanem kimondottan gnome cuccok fejlesztésére van (persze emiatt van köze a gtk-hoz is). Gondolom, ha portolhatónak akarod megtartani a progidat, akkor érdemes maradnod a gtk-nál. Ahhoz referencia és tutorial is van a gtk.org-on, én is ezt használom, meg a példaprogramokat, amik a gtk source-szal jönnek.

A mail címemet egyrészt megtalálod a profilomban, másrészt maradjunk szerintem a fórum használata mellett, hátha másoknak is jól jönnek az itt leírtak.

b.

Eh tegnap szorakoztam a pixbufal es nem igazan akar ossze jonni. GTK-s ablakot akar kezzel tudok csinalni meg gombot meg mindent, de ez a pixbuf ez eh...

[quote:29801690ce="qzy"]
Mindjárt előbányászom a kódot, amivel én tudtam elegendően gyorsan rajzolni ahhoz, hogy egy méretes képen egy csík kövesse az egér mozgását (kicsit, mint a ruler widget-nél), csak most nem vagyok a gépem mellett.

Bocs, most értem csak haza. :oops:

Na, nálam úgy van, hogy van egy drawable az ablakban, ahova rajzolok. Van egy pixmap változó, ami tartalmazza a képet, GdkPixmap típusú, gdk_pixmap_new-val hozom létre. Ide rajzolok bele, és aztán innen teszem ki az ablakba gdk_draw_pixmap-pel a kérdéses drawable widget expose event-jében. Ez kicsit lassú, viszont kényelmes.

Így teszem ki a képet:

[code:1:29801690ce]
gint drawingarea_expose_event( GtkWidget *widget,
GdkEventExpose *event,
gpointer data ) {

if (pixmap[(gint)data].image) {
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
pixmap[(gint)data].image,
event->area.x, event->area.y,
event->area.x, event->area.y,
MIN(event->area.width, pixmap[(gint)data].width),
MIN(event->area.height, pixmap[(gint)data].height));
}

return FALSE;
}
[/code:1:29801690ce]

Így rajzolok vonalat egy image-re (azaz ez nem jelenik meg azonnal a képernyőn, csak az expose után):

[code:1:29801690ce]
GdkColor *vertical_line_color;
GdkGC *vertical_line_gc;

vertical_line_gc = gdk_gc_new(pixmap[i].image);
calculate_rgb(LIGHTGREY, &red, &green, &blue);
vertical_line_color = (GdkColor *)malloc(sizeof(GdkColor));
vertical_line_color->red = red * (65535/256);
vertical_line_color->green = green * (65535/256);
vertical_line_color->blue = blue * (65535/256);
vertical_line_color->pixel = (gulong)(red*65536 + green*256 + blue);

gdk_colormap_alloc_color(gtk_widget_get_colormap(my_gtk_application_window.main_window), vertical_line_color, FALSE, TRUE);
gdk_gc_set_foreground(vertical_line_gc, vertical_line_color);
{
guint j = 0;
for (j=0;j<width;j+=10)
gdk_draw_line(pixmap[i].image, vertical_line_gc, j, 0, j, height);
}
free(vertical_line_color);
free(vertical_line_gc);
}

[/code:1:29801690ce]

Ha gyorsan kell belerajzolni az ablakba, és nem olyan fontos, hogy ez a memóriabeli image-ben is megjelenjen (egér pozícióját mutató segédvonalak, amik nem részei az alatta levő képnek), akkor közvetelnül is rá lehet rajzolni a drawable-re. Így:

[code:1:29801690ce]
void put_line(GdkDrawable *pdrawable, gint x1, gint y1, gint x2, gint y2, gint colorcode) {

gint width, height;
GdkColor *color;
GdkGC *gc;
guint red, green, blue;

calculate_rgb(colorcode, &red, &green, &blue);

gdk_drawable_get_size(pdrawable, &width, &height);

gc = gdk_gc_new(pdrawable);
color = (GdkColor *)malloc(sizeof(GdkColor));
color->red = red * (65535/255);
color->green = green * (65535/255);
color->blue = blue * (65535/255);
color->pixel = (gulong)(red*65536 + green*256 + blue);
gdk_colormap_alloc_color(gtk_widget_get_colormap(my_gtk_application_window.main_window), color, FALSE, TRUE);
gdk_gc_set_foreground(gc, color);

gdk_draw_line(pdrawable, gc, x1, height-y1, x2, height-y2);

free(color);
g_object_unref(gc);
}

[/code:1:29801690ce]

Remélem, segítettem.

Üdv: Bálint

valami doksid nincs errol a gdk pixbufrol? :) Mert megmondom oszinten nem teljesen ertem ami kodreszletet irtal.

Adnal egy email cimet? Ha adnal kerdeznek. :) Ha nem akarod nyilvanossagra hozni akkor hygy@freemail.hu-ra is dobhatsz levelet.

koszi :)

HyGy

Hello!

Tud valaki valami olyan leirast (tutorialt) ami lepesenkent vegig vezetne az embert ezen a fenti 3 teman inkabb peldakon keresztul megkozelitve?

Elso korben annit szeretnek, hogy egy GTK ablak, ket reszre osztva a fentiben egy drawing area, amire mozgo objektumokat szeretnek tenni (spriteok) az also reszen meg egy menu par menupontal.

De ha tudtok valami egyeb jo cuccot (nem ragaszkodom a GTK-hoz. amit kesobb konnyu portolni windowsra/wince-re/familiar linuxkra (gtk, qt). Akkor azt is szivesen vennem. Vagy esetleg egy RAD cucc is jo lenne linuxra. Hja es az egesznek meg soros portot is kell kezelnie.

HyGy

Hi!

Ha portolhatot akarsz, akkor allitolag a wxwindows is jo. Gtk-hoz meg van tutirial a www.gtk.org.on.

A soros port kezelese nem fugg attol, hogy gtk, gt, vagy mi, az ezektol total fuggetlen. Viszont azt nem tudom, hogy hogy kell portolni winre, mert szerintem az eleg Linux specifukus.

By(t)e
TBS::Antiemes

[quote:1ff890d58f="hygy"]Hello!

Tud valaki valami olyan leirast (tutorialt) ami lepesenkent vegig vezetne az embert ezen a fenti 3 teman inkabb peldakon keresztul megkozelitve?

Elso korben annit szeretnek, hogy egy GTK ablak, ket reszre osztva a fentiben egy drawing area, amire mozgo objektumokat szeretnek tenni (spriteok) az also reszen meg egy menu par menupontal.

De ha tudtok valami egyeb jo cuccot (nem ragaszkodom a GTK-hoz. amit kesobb konnyu portolni windowsra/wince-re/familiar linuxkra (gtk, qt). Akkor azt is szivesen vennem. Vagy esetleg egy RAD cucc is jo lenne linuxra. Hja es az egesznek meg soros portot is kell kezelnie.

HyGy

Glade + python + pyglade + pyserial
A WINCE kivételével portolható.

http://www.pygtk.org/tutorial.html

Gödri