Re: GdkPixbuf questions
- From: Magnus Myrefors <myrefors magnus telia com>
- To: gtk-list gnome org
- Subject: Re: GdkPixbuf questions
- Date: Wed, 21 Mar 2007 16:04:21 +0100
onsdagen den 21 mars 2007 08.50 skrev s88:
Hi,
I tried to use the put_pixel()-function but I encountered problems so I
switched to the gdk-drawing functions instead. There is also an alternative
to drawing areas... if you look at the bottom of the reference manual-page
for GtkDrawingArea.
/Magnus
> Hi all:
> I have some questions when I using the drawable area with the
> gtk+2.0.
> First, I'm building a data analyzer under thr Linux, so there is a process
> to generate the data and my analyzer display the data.
> My idea is to use a drawable area(I use the GtkDrawingArea) and get the pix
> buffer of it by the gdk_pixbuf_get_from_drawable(), then my background
> program can fill the pix buffer pix by pix.
>
> Question 1: anytime I fill to the pixbuf, it will rendering the drawing
> area immediately?
> Question 2: the following code segment is what I done until now...what
> should I do?
>
> Thanks.
> Dave.
>
> this function put_pixel is referenced from the GDK Reference Manual
> 34 void
> 35 put_pixel (GdkPixbuf *pixbuf, int x, int y, guchar red, guchar green,
> guchar blue, guchar alpha)
> 36 {
> 37 int width, height, rowstride, n_channels;
> 38 guchar *pixels, *p;
> 39
> 40 n_channels = gdk_pixbuf_get_n_channels (pixbuf);
> 41 g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
> 42 g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
> 43 g_assert (gdk_pixbuf_get_has_alpha (pixbuf));
> 44 g_assert (n_channels == 4);
> 45
> 46 width = gdk_pixbuf_get_width (pixbuf);
> 47 height = gdk_pixbuf_get_height (pixbuf);
> 48
> 49 g_assert (x >= 0 && x < width);
> 50 g_assert (y >= 0 && y < height);
> 51
> 52 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
> 53 pixels = gdk_pixbuf_get_pixels (pixbuf);
> 54
> 55 p = pixels + y * rowstride + x * n_channels;
> 56 p[0] = red;
> 57 p[1] = green;
> 58 p[2] = blue;
> 59 p[3] = alpha;
> 60 }
>
>
> In the callbacks.c
> function on_drawingarea_virtual_LCD_configure_event() is the callback
> function of my drawing area.
>
> 151 gboolean
> 152 on_drawingarea_virtual_LCD_configure_event (GtkWidget
> *widget,
> 153 GdkEventConfigure *event)
> 154 {
> 155 gint x,y;
> 156 GdkPixbuf* virtual_LCD_buf;
> 157 GdkRectangle rect;
> 158
> 159
> 160 if(virtual_LCD_pixmap)
> 161 g_object_unref(virtual_LCD_pixmap);
> 162
> 163 virtual_LCD_pixmap = gdk_pixmap_new(widget->window,
> 164 widget->allocation.width,
> 165 widget->allocation.height,
> 166 -1);
> 167
> 168 gdk_window_get_origin (widget->window, &x, &y);
> 169 rect.x = x;
> 170 rect.y = y;
> 171 gdk_drawable_get_size (GDK_DRAWABLE (widget->window), &rect.width,
> 172 &rect.height);
> 173
> 174 virtual_LCD_buf = gdk_pixbuf_get_from_drawable(NULL,
> 175 virtual_LCD_pixmap,
> 176
> gdk_colormap_get_system(),
> 177 rect.x-x,
> 178 rect.y-y,
> 179 0,
> 180 0,
> 181 rect.width,
> 182 rect.height
> 183 );
> 184 gint i=0;
> 185 // I want to test the put_pixel when the drawing are establish.
> 186 for(i=0;i<100;i++){
> 187 put_pixel (virtual_LCD_buf, i, i, 255-i,255-i,255-(2*i),0);
> 188
> 189
> 190 }
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]