2008/7/15 Luka Napotnik <[EMAIL PROTECTED]>:
> Hello.
>
> I encounter a strange problem when I'm writing image data to the
> GdkPixbuf data buffer.
>
> I create an empty pixbuf and get the data buffer. Then I use:
>
> pixel = pixbuf_data + i * n_channels
>
> , where pixel is a pointer to the pixel, pixbuf_data is the pixbuf data
> buffer, i is a counter in a for loop with a condition:
>
> for (i = 0; i < width*height; i++)
>
> This for loop should iterate throught all pixel in the image. The
> n_channels variable is 4 because I use a RGBA pixbuf.
> When I have this pixel pointer, I use pixel[0], pixel[1], pixel[2] and
> pixel[3] to modify the RGBA values.
>
> I then handle the "expose-event", create a cairo surface using the
> GdkPixbuf and display the surface onto the drawing area. The problem is
> when I display the pixbuf the image is shifted to the right for exacly
> two pixels. Meaning the first two pixels in the upper left are two
> places to the right, making the last two pixels of the row appear in the
> second row. I hope you understand.
>
> Am I making something wrong when writing data to the pixbuf? Or is there
> any other explanation. Please help.
>
> Greets,
> Luka
>

Luka,
You should change this to something like this:
pixel = gdk_pixbuf_get_pixels(pixbuf);
rowstride = gdk_pixbuf_get_rowstride(pixbuf);
for(y=0;y<height;y++) {
  for(x=0;x<width;x++) {
    /* do something with 'pixel' */
    pixel += n_channels;
  }
  pixel += (rowstride - n_channels*width);
}

Rowstride can be something other than n_channels*width, which could
cause problems similar to what you're describing.
-Jim
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to