Information that describes an image.
The structure contains information that describes an image in memory.
Image data in a pixbuf is stored in memory in uncompressed, packed format. Rows
in the image are stored top to bottom, and in each row pixels are stored from
left to right. There may be padding at the end of a row. The "rowstride" value
of a pixbuf, as returned by gdk-pixbuf-get-rowstride
, indicates the
number of bytes between rows.
The following code illustrates a simple put_pixel() function for RGB pixbufs with 8 bits per channel with an alpha channel. It is not included in the gdk-pixbuf library for performance reasons; rather than making several function calls for each pixel, your own code can take shortcuts.
static void put_pixel (GdkPixbuf *pixbuf, int x, int y, guchar red, guchar green, guchar blue, guchar alpha) { int width, height, rowstride, n_channels; guchar *pixels, *p; n_channels = gdk_pixbuf_get_n_channels (pixbuf); g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB); g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8); g_assert (gdk_pixbuf_get_has_alpha (pixbuf)); g_assert (n_channels == 4); width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); g_assert (x >= 0 && x < width); g_assert (y >= 0 && y < height); rowstride = gdk_pixbuf_get_rowstride (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); p = pixels + y * rowstride + x * n_channels; p[0] = red; p[1] = green; p[2] = blue; p[3] = alpha; }
This function will not work for pixbufs with images that are other than 8 bits per sample or channel, but it will work for most of the pixbufs that GTK+ uses.
If you are doing memcpy
of raw pixbuf data, note that the last row in the
pixbuf may not be as wide as the full rowstride, but rather just as wide as the
pixel data needs to be. That is, it is unsafe to do ‘memcpy (dest, pixels,
rowstride * height)’ to copy a whole pixbuf. Use gdk-pixbuf-copy
instead,
or compute the width in bytes of the last row as ‘width * ((n_channels *
bits_per_sample + 7) / 8)’.
Derives from
<gobject>
.This class defines the following slots:
colorspace
- The colorspace in which the samples are interpreted
n-channels
- The number of samples per pixel
has-alpha
- Whether the pixbuf has an alpha channel
bits-per-sample
- The number of bits per sample
width
- The number of columns of the pixbuf
height
- The number of rows of the pixbuf
rowstride
- The number of bytes between the start of a row and the start of the next row
pixels
- A pointer to the pixel data of the pixbuf
<gdk-pixbuf>
) ⇒ (ret <gdk-colorspace>
)Queries the color space of a pixbuf.
- pixbuf
- A pixbuf.
- ret
- Color space.
<gdk-pixbuf>
) ⇒ (ret int
)Queries the number of channels of a pixbuf.
- pixbuf
- A pixbuf.
- ret
- Number of channels.
<gdk-pixbuf>
) ⇒ (ret bool
)Queries whether a pixbuf has an alpha channel (opacity information).
- pixbuf
- A pixbuf.
- ret
- ‘
#t
’ if it has an alpha channel, ‘#f
’ otherwise.
<gdk-pixbuf>
) ⇒ (ret int
)Queries the number of bits per color sample in a pixbuf.
- pixbuf
- A pixbuf.
- ret
- Number of bits per color sample.
<gdk-pixbuf>
) ⇒ (ret int
)Queries the width of a pixbuf.
- pixbuf
- A pixbuf.
- ret
- Width in pixels.
<gdk-pixbuf>
) ⇒ (ret int
)Queries the height of a pixbuf.
- pixbuf
- A pixbuf.
- ret
- Height in pixels.
<gdk-pixbuf>
) ⇒ (ret int
)Queries the rowstride of a pixbuf, which is the number of bytes between the start of a row and the start of the next row.
- pixbuf
- A pixbuf.
- ret
- Distance between row starts.
<gdk-pixbuf>
) (key mchars
) ⇒ (ret mchars
)Looks up key in the list of options that may have been attached to the pixbuf when it was loaded.
- pixbuf
- a
<gdk-pixbuf>
- key
- a nul-terminated string.
- ret
- the value associated with key. This is a nul-terminated string that should not be freed or ‘
#f
’ if key was not found.