Содержание Список структур

XImage - структура описания локального графического образа

Объявление структуры:

    typedef struct _XImage {
        int width, height;		/* size of image */
        int xoffset;		/* number of pixels offset in X direction */
        int format;			/* XYBitmap, XYPixmap, ZPixmap */
        char *data;			/* pointer to image data */
        int byte_order;		/* data byte order, LSBFirst, MSBFirst */
        int bitmap_unit;		/* quant. of scanline 8, 16, 32 */
        int bitmap_bit_order;	/* LSBFirst, MSBFirst */
        int bitmap_pad;		/* 8, 16, 32 either XY or ZPixmap */
        int depth;			/* depth of image */
        int bytes_per_line;		/* accelarator to next line */
        int bits_per_pixel;		/* bits per pixel (ZPixmap) */
        unsigned long red_mask;	/* bits in z arrangment */
        unsigned long green_mask;
        unsigned long blue_mask;
        XPointer obdata;		/* hook for the object routines to hang on */
        struct funcs {		/* image manipulation routines */
    #if NeedFunctionPrototypes
	struct _XImage *(*create_image)(
	    struct _XDisplay* /* display */,
	    Visual*		/* visual */,
	    unsigned int	/* depth */,
	    int		/* format */,
	    int		/* offset */,
	    char*		/* data */,
	    unsigned int	/* width */,
	    unsigned int	/* height */,
	    int		/* bitmap_pad */,
	    int		/* bytes_per_line */);
	    int (*destroy_image)        (struct _XImage *);
	    unsigned long (*get_pixel)  (struct _XImage *, int, int);
	    int (*put_pixel)            (struct _XImage *, int, int, unsigned long);
	    struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int);
	    int (*add_pixel)            (struct _XImage *, long);
    #else
	    struct _XImage *(*create_image)();
	    int (*destroy_image)();
	    unsigned long (*get_pixel)();
	    int (*put_pixel)();
	    struct _XImage *(*sub_image)();
	    int (*add_pixel)();
    #endif
	} f;
    } XImage;

       Особенностью структуры XImage является то, что кроме обычных полей данных она содержит указатели на функции, производящие манипуляции с изображением, которое описывается этой структурой. В связи с этим, если изображение создаётся программой самостоятельно, а не получается как результат работы какой-либо из функций библиотеки Xlib, необходимо инициализировать указатели на функции при помощи вызова XInitImage. При этом все необходмые поля данных уже должны быть заполнены.

       Это сделано для уменьшения накладных расходов при выборе функций для работы с графическими образами, имеющими разные параметры.

       Поля width и height хранят размер изображения.

       Поле xoffset хранит количество точек от начала строки изображения, которые будут игнорироваться. Этот параметр, к примеру, можно использовать для увеличения эффективности вывода монохромных изображений в монохромные объекты вывода графики - делать количество игнорируемых точек таким, чтобы отсутствовала необходимость побитового сдвига строк изображения перед их выводом. Возможно, в наше время это не настолько актуально, но в то время, когда вычислительные системы не обладали столь высокой производительностью, этот параметр позволял существенно повысить скорость вывода изображения.

       Поле format указывает на формат представления данных изображения. XYBitmap подразумевает монохромное изображение, XYPixmap в данных изображения хранит индексы из цветовой палитры, а ZPixmap кроме этого позволяет работать с масками красного, зеленого и синего цветов, которые берутся из используемого визуального типа.

       Поле data хранит указатель на массив данных изображения.

       Поле byte_order указывает порядок расположения байтов в массиве данных при формировании многобайтовых значений. Может принимать значения (LSBFirst - младший байт первый или MSBFirst - старший байт первый).

       Поле bitmap_unit указывает количество разрядов, используемых для хранения одной точки изображения. (8, 16 или 32 бита)

       Поле bitmap_bit_order указывает на порядок расположения разрядов в байтах массива данных изображения относительно увеличения координаты x. Может принимать значения (LSBFirst - младший бит первый или MSBFirst - старший бит первый).

       Поле bitmap_pad является параметром выравнивания адреса начала строки изображения (8, 16 или 32 бита). К примеру, если установлено значение 8, то строка изображения может начинаться с произвольного адреса, а если установлено значение 16, то строки будут начинаться только с чётных адресов. Это сделано с возможностью предоставления оптимизации скорости для систем с повышенной разрядностью, поскольку выборка многобайтовых значений с адресов, кратных разрядности шины данных системы производится быстрее.

       Поле depth указывает глубину цветности изображения.

       Поле bytes_per_line указывает на количество байт, отводимых на одну строку изображения. Используется для вычисления адреса следующей строки.

       Поле bits_per_pixel указывает на количество разрядов, отводимых для кодирования одной точки изображения. Используется только для формата изображения ZPixmap.

       Поля red_mask, green_mask и blue_mask указывают, какие разряды, используемые при кодировании точки хранят значения яркости красной, зелёной и синей составляющих цвета. Используются только для формата изображения ZPixmap.

       Остальные поля связаны с указателями на функции, которые рассчитаны на работу с описываемым изображением. Следует отметить, что при обращении к функции Xlib, которая должна выполнить какое-либо действие с изображением, реально подставляется макроопределение, которое вызовет соответствующую функцию, указатель на которую прописан в структуре, описывающей изображение.

См. также: XInitImage, XCreateImage, XGetPixel, XPutPixel, XSubImage, XAddPixel, XDestroyImage, XPutImage, XGetImage, XGetSubImage.


Содержание Список структур