В действительности, пиксельная карта X может трактоваться как окно, которое не появляется на экране. Многие графические операции, которые работают в окнах, точно также будут работать в пиксельных картах - достаточно подставить дескриптор пиксельной карты вместо дескриптора окна. В страницах справочного руководства видно, что все эти функции принимают TDrawable, не TWindow, поскольку как окна так и пиксельные карты - рисуемые элементы, и они оба могут использоваться, чтобы рисовать в них такими функциями, как, например, XDrawArc(), XDrawText(), и т.п.
Один из способов загрузки битового изображение из файла в память - включение файла побитового изображения в программу директивой #include препроцессора языка С.
Покажем, как можно получить доступ к файлу непосредственно:
var
bitmap: TPixmap;
bitmap_width, bitmap_height: word;
hotspot_x, hotspot_y: integer;
root_win: TWindow;
rc: longint;
root_win:= XDefaultRootWindow(display);
rc:= XReadBitmapFile(display, root_win, 'icon.bmp', @bitmap_width, @bitmap_height, @bitmap, @hotspot_x, @hotspot_y);
case (rc) of
BitmapOpenFailed:
writeln('XReadBitmapFile - не могу открыть файл "icon.bmp"');
BitmapFileInvalid:
writeln('XReadBitmapFile - файл "icon.bmp" не содержит корректного битового изображения.');
BitmapNoMemory:
writeln('XReadBitmapFile - не хватает памяти.');
BitmapSuccess:
(* битовая карта успешно загружена - что-то делаем с ней… *)
.
.
end;
Имейте в виду, что параметр root_win не имеет ничего общего с данным битовым изображением - битовая карта не связывается с этим окном. Этот дескриптор окна использован только для определения экрана, для которого мы хотим создать пиксельную карту. Это существенно, так как для того, чтобы быть полезной, пиксельная карта должна поддерживать то же количество цветов, что и экран.
Как только мы получили дескриптор пиксельной карты, сгенерированный из битового изображения, мы можем нарисовать ее в некотором окне, используя функцию XCopyPlane(). Эта функция позволяет указать, в какой рисуемой области (окне, или даже другой пиксельной карте) и в какой позиции будет отображена данная пиксельная карта.