Inline data

Inline data — Functions for inlined pixbuf handling.

Synopsis


#include <gdk-pixbuf/gdk-pixdata.h>


                    GdkPixdata;
enum                GdkPixdataType;
enum                GdkPixdataDumpType;
#define             GDK_PIXBUF_MAGIC_NUMBER
#define             GDK_PIXDATA_HEADER_LENGTH
gpointer            gdk_pixdata_from_pixbuf             (GdkPixdata *pixdata,
                                                         const GdkPixbuf *pixbuf,
                                                         gboolean use_rle);
GdkPixbuf*          gdk_pixbuf_from_pixdata             (const GdkPixdata *pixdata,
                                                         gboolean copy_pixels,
                                                         GError **error);
guint8*             gdk_pixdata_serialize               (const GdkPixdata *pixdata,
                                                         guint *stream_length_p);
gboolean            gdk_pixdata_deserialize             (GdkPixdata *pixdata,
                                                         guint stream_length,
                                                         const guint8 *stream,
                                                         GError **error);
GString*            gdk_pixdata_to_csource              (GdkPixdata *pixdata,
                                                         const gchar *name,
                                                         GdkPixdataDumpType dump_type);

Description

Using GdkPixdata, images can be compiled into an application, making it unnecessary to refer to external image files at runtime. gdk-pixbuf includes a utility named gdk-pixbuf-csource, which can be used to convert image files into GdkPixdata structures suitable for inclusion in C sources. To convert the GdkPixdata structures back into GdkPixbufs, use gdk_pixbuf_from_pixdata.

Details

GdkPixdata

typedef struct {
  guint32 magic;        /* GDK_PIXBUF_MAGIC_NUMBER */
  gint32  length;       /* <1 to disable length checks, otherwise:
			 * GDK_PIXDATA_HEADER_LENGTH + pixel_data length
			 */
  guint32 pixdata_type; /* GdkPixdataType */
  guint32 rowstride;
  guint32 width;
  guint32 height;
  guint8 *pixel_data;
} GdkPixdata;

A GdkPixdata contains pixbuf information in a form suitable for serialization and streaming.

guint32 magic; magic number. A valid GdkPixdata structure must have GDK_PIXBUF_MAGIC_NUMBER here.
gint32 length; less than 1 to disable length checks, otherwise GDK_PIXDATA_HEADER_LENGTH + length of pixel_data.
guint32 pixdata_type; information about colorspace, sample width and encoding, in a GdkPixdataType.
guint32 rowstride; Distance in bytes between rows.
guint32 width; Width of the image in pixels.
guint32 height; Height of the image in pixels.
guint8 *pixel_data; width x height pixels, encoded according to pixdata_type and rowstride.

enum GdkPixdataType

typedef enum
{
  /* colorspace + alpha */
  GDK_PIXDATA_COLOR_TYPE_RGB    = 0x01,
  GDK_PIXDATA_COLOR_TYPE_RGBA   = 0x02,
  GDK_PIXDATA_COLOR_TYPE_MASK   = 0xff,
  /* width, support 8bits only currently */
  GDK_PIXDATA_SAMPLE_WIDTH_8    = 0x01 << 16,
  GDK_PIXDATA_SAMPLE_WIDTH_MASK = 0x0f << 16,
  /* encoding */
  GDK_PIXDATA_ENCODING_RAW      = 0x01 << 24,
  GDK_PIXDATA_ENCODING_RLE      = 0x02 << 24,
  GDK_PIXDATA_ENCODING_MASK     = 0x0f << 24
} GdkPixdataType;

An enumeration containing three sets of flags for a GdkPixdata struct: one for the used colorspace, one for the width of the samples and one for the encoding of the pixel data.

GDK_PIXDATA_COLOR_TYPE_RGB each pixel has red, green and blue samples.
GDK_PIXDATA_COLOR_TYPE_RGBA each pixel has red, green and blue samples and an alpha value.
GDK_PIXDATA_COLOR_TYPE_MASK mask for the colortype flags of the enum.
GDK_PIXDATA_SAMPLE_WIDTH_8 each sample has 8 bits.
GDK_PIXDATA_SAMPLE_WIDTH_MASK mask for the sample width flags of the enum.
GDK_PIXDATA_ENCODING_RAW the pixel data is in raw form.
GDK_PIXDATA_ENCODING_RLE the pixel data is run-length encoded. Runs may be up to 127 bytes long; their length is stored in a single byte preceding the pixel data for the run. If a run is constant, its length byte has the high bit set and the pixel data consists of a single pixel which must be repeated.
GDK_PIXDATA_ENCODING_MASK mask for the encoding flags of the enum.

enum GdkPixdataDumpType

typedef enum
{
  /* type of source to save */
  GDK_PIXDATA_DUMP_PIXDATA_STREAM	= 0,
  GDK_PIXDATA_DUMP_PIXDATA_STRUCT	= 1,
  GDK_PIXDATA_DUMP_MACROS		= 2,
  /* type of variables to use */
  GDK_PIXDATA_DUMP_GTYPES		= 0,
  GDK_PIXDATA_DUMP_CTYPES		= 1 << 8,
  GDK_PIXDATA_DUMP_STATIC		= 1 << 9,
  GDK_PIXDATA_DUMP_CONST		= 1 << 10,
  /* save RLE decoder macro? */
  GDK_PIXDATA_DUMP_RLE_DECODER		= 1 << 16
} GdkPixdataDumpType;

An enumeration which is used by gdk_pixdata_to_csource() to determine the form of C source to be generated. The three values GDK_PIXDATA_DUMP_PIXDATA_STREAM, GDK_PIXDATA_DUMP_PIXDATA_STRUCT and GDK_PIXDATA_DUMP_MACROS are mutually exclusive, as are GDK_PIXBUF_DUMP_GTYPES and GDK_PIXBUF_DUMP_CTYPES. The remaining elements are optional flags that can be freely added.

GDK_PIXDATA_DUMP_PIXDATA_STREAM Generate pixbuf data stream (a single string containing a serialized GdkPixdata structure in network byte order).
GDK_PIXDATA_DUMP_PIXDATA_STRUCT Generate GdkPixdata structure (needs the GdkPixdata structure definition from gdk-pixdata.h).
GDK_PIXDATA_DUMP_MACROS Generate *_ROWSTRIDE, *_WIDTH, *_HEIGHT, *_BYTES_PER_PIXEL and *_RLE_PIXEL_DATA or *_PIXEL_DATA macro definitions for the image.
GDK_PIXDATA_DUMP_GTYPES Generate GLib data types instead of standard C data types.
GDK_PIXDATA_DUMP_CTYPES Generate standard C data types instead of GLib data types.
GDK_PIXDATA_DUMP_STATIC Generate static symbols.
GDK_PIXDATA_DUMP_CONST Generate const symbols.
GDK_PIXDATA_DUMP_RLE_DECODER Provide a *_RUN_LENGTH_DECODE(image_buf, rle_data, size, bpp) macro definition to decode run-length encoded image data.

GDK_PIXBUF_MAGIC_NUMBER

#define GDK_PIXBUF_MAGIC_NUMBER (0x47646b50)    /* 'GdkP' */

Magic number for GdkPixdata structures.


GDK_PIXDATA_HEADER_LENGTH

#define	GDK_PIXDATA_HEADER_LENGTH	(4 + 4 + 4 + 4 + 4 + 4)

The length of a GdkPixdata structure without the pixel_data pointer.


gdk_pixdata_from_pixbuf ()

gpointer            gdk_pixdata_from_pixbuf             (GdkPixdata *pixdata,
                                                         const GdkPixbuf *pixbuf,
                                                         gboolean use_rle);

Converts a GdkPixbuf to a GdkPixdata. If use_rle is TRUE, the pixel data is run-length encoded into newly-allocated memory and a pointer to that memory is returned.

pixdata : a GdkPixdata to fill.
pixbuf : the data to fill pixdata with.
use_rle : whether to use run-length encoding for the pixel data.
Returns : If ure_rle is TRUE, a pointer to the newly-allocated memory for the run-length encoded pixel data, otherwise NULL.

gdk_pixbuf_from_pixdata ()

GdkPixbuf*          gdk_pixbuf_from_pixdata             (const GdkPixdata *pixdata,
                                                         gboolean copy_pixels,
                                                         GError **error);

Converts a GdkPixdata to a GdkPixbuf. If copy_pixels is TRUE or if the pixel data is run-length-encoded, the pixel data is copied into newly-allocated memory; otherwise it is reused.

pixdata : a GdkPixdata to convert into a GdkPixbuf.
copy_pixels : whether to copy raw pixel data; run-length encoded pixel data is always copied.
error : location to store possible errors.
Returns : a new GdkPixbuf.

gdk_pixdata_serialize ()

guint8*             gdk_pixdata_serialize               (const GdkPixdata *pixdata,
                                                         guint *stream_length_p);

Serializes a GdkPixdata structure into a byte stream. The byte stream consists of a straightforward writeout of the GdkPixdata fields in network byte order, plus the pixel_data bytes the structure points to.

pixdata : a valid GdkPixdata structure to serialize.
stream_length_p : location to store the resulting stream length in.
Returns : A newly-allocated string containing the serialized GdkPixdata structure.

gdk_pixdata_deserialize ()

gboolean            gdk_pixdata_deserialize             (GdkPixdata *pixdata,
                                                         guint stream_length,
                                                         const guint8 *stream,
                                                         GError **error);

Deserializes (reconstruct) a GdkPixdata structure from a byte stream. The byte stream consists of a straightforward writeout of the GdkPixdata fields in network byte order, plus the pixel_data bytes the structure points to. The pixdata contents are reconstructed byte by byte and are checked for validity. This function may fail with GDK_PIXBUF_CORRUPT_IMAGE or GDK_PIXBUF_ERROR_UNKNOWN_TYPE.

pixdata : a GdkPixdata structure to be filled in.
stream_length : length of the stream used for deserialization.
stream : stream of bytes containing a serialized GdkPixdata structure.
error : GError location to indicate failures (maybe NULL to ignore errors).
Returns : Upon successful deserialization TRUE is returned, FALSE otherwise.

gdk_pixdata_to_csource ()

GString*            gdk_pixdata_to_csource              (GdkPixdata *pixdata,
                                                         const gchar *name,
                                                         GdkPixdataDumpType dump_type);

Generates C source code suitable for compiling images directly into programs.

GTK+ ships with a program called gdk-pixbuf-csource which offers a command line interface to this function.

pixdata : a GdkPixdata to convert to C source.
name : used for naming generated data structures or macros.
dump_type : a GdkPixdataDumpType determining the kind of C source to be generated.
Returns : a newly-allocated string containing the C source form of pixdata.