X PixMap ( XPM ) — формат файла изображения , используемый системой X Window , созданный в 1989 году Даниэлем Дардайлером и Коласом Нахабу, работающими в Исследовательском центре быков в Софии-Антиполисе , Франция, и позже улучшенный Арно Ле Хорсом. [2] [3]
Он предназначен в первую очередь для создания растровых изображений значков и поддерживает прозрачные пиксели . Созданный на основе более раннего синтаксиса XBM , он представляет собой обычный текстовый файл в формате XPM2 или синтаксис языка программирования C , который может быть включен в файл программы C. [2]
Первый (1989 г.) формат XPM относительно похож на формат XBM. [a] По сравнению с XBM, он использует дополнительные макроопределения и переменные для индексированных цветов и заменяет биты символами для описания изображения. Ниже приведено черно-белое изображение в формате XPM 1989 года.
#define XFACE_format 1 #define XFACE_width 48 #define XFACE_height 48 #define XFACE_ncolors 2 #define XFACE_chars_per_pixel 1 static char * XFACE_colors [] = { "a" , "#ffffff" , "b" , "#000000" }; static char * XFACE_pixels [] = { "abaabaababaaabaababaabaabaabaabaabaaababaabaaab" , // и так далее для 48 строк по 48 пикселей
XPM2 (1990) упрощает формат, удаляя весь код C. [b] [c] Структура упрощается до
! ХРМ2<Значения><Цвета><Пиксели><Дополнительные расширения>
#define
утверждениям.Приведенный выше файл с шириной 48, высотой 4, 2 цветами и 1 символом на пиксель будет выглядеть так:
! ХРМ248 4 2 1ак #FFFFFFдо н.э. #000000абаабаабабааабаабабаабаабаабаабабаааабабааабабаабаабабааабаабабаабаабаабаабабаааабабааабабаабаабабааабаабабаабаабаабаабабаааабабааабабаабаабабааабаабабаабаабаабаабабаааабабаааб
Помимо шестнадцатеричных кодов, цветами могут быть любые названия цветов X11 . Кроме того, None
указывает на прозрачность. [4] [5]
«Символическая» функция позволяет настраивать цвета в зависимости от контекста, в котором они используются. Код такой, какой s border c blue
можно корректировать на синем фоне.
Известно, что один инструмент использует только от a до p для 16 цветов, переключаясь на aa до dp для 64 цветов, но по-прежнему считывает односимвольные кодировки для 64 цветов; сравните Base64 .
При большем количестве цветов в кодах используется больше символов, например, от аа до pp для 16 × 16 = 256 цветов. Это менее полезно для текстовых редакторов, поскольку строка ab на самом деле может быть серединой двух соседних пикселей dabc . В качестве цветового кода разрешены пробелы, но это может быть плохой идеей в зависимости от используемого текстового редактора. Без управляющих кодов, обратной косой черты и кавычек (необходимы в XPM1 и XPM3) 128–33–2 = 93 символа ASCII доступны для односимвольных цветовых кодов.
Упрощенный пример: 90 символов US-ASCII можно объединить в девять непересекающихся наборов по 10 символов. Таким образом, однозначные строки из девяти символов могут задать цвет каждого пикселя по его индексу палитры XPM, вплоть до 10 9 =1 000 000 000 цветов (сравните с GIF , который поддерживает только 256).
Для XPM2 ясно, сколько строк принадлежит изображению — две строки заголовка, вторая строка заголовка сообщает количество цветовых кодов (2 строки в примере выше) и строк (высота 4 в примере выше), например 2 + 2. + 4 = 8 строк.
Текущий и последний формат — XPM3 (1991). Он заново представляет оболочку C, но вместо явного отображения структуры файла сохраняемые строки по существу идентичны XPM2.
/* XPM */ static char * XFACE [] = { "48 4 2 1" , "ac #ffffff" , "bc #000000" , "abaabaababaaabaababaabaabaabaabaabaaababaabaaab" , "abaabaababaaabaababaabaabaabaabaaababaabaaab" , "abaabaabaaabaababaabaabaabaabaaababaaab" , " абаабаабабааабаабабабаабаабаабабаабааабабаабаааб" };
Если строка «значения» содержит шесть цифр вместо четырех, дополнительные значения указывают координаты «горячей точки», где 0 0 — верхний левый угол поля, содержащего значок и значение по умолчанию. «Точка доступа» используется для указателей мыши и подобных приложений.
Следующий код отображает один и тот же файл blar в форматах XBM , XPM и PBM .
ХБМ-версия:
#define test_width 16 #define test_height 7 static char test_bits [] = { 0x13 , 0x00 , 0x15 , 0x00 , 0x93 , 0xcd , 0x55 , 0xa5 , 0x93 , 0xc5 , 0x00 , 0x80 , 0x00 , 0 х60 };
Версия XPM2:
! ХРМ216 7 2 1* с#000000. с #ffffff**..*...........*.*.*...........**..*..**.**..***.*.*.*.*.*..*.***..*..**.*...**.............*.............**.
Версия XPM3:
/* XPM */ static char * blarg_xpm [] = { "16 7 2 1" , "* c #000000" , ". c #ffffff" , "**..*.......... ." , "*.*.*..........." , "**..*..**.**..**" , "*.*.*.*. *.*..*.*" , "**..*..**.*...**" , "...............*" , ". ............**." };
PBM-файл:
П116 71 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 01 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 01 1 0 0 1 0 0 1 1 0 1 1 0 0 1 11 0 1 0 1 0 1 0 1 0 1 0 0 1 0 11 1 0 0 1 0 0 1 1 0 1 0 0 0 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
ACDSee , Amaya , CorelDRAW , GIMP , ImageMagick , IrfanView (плагин форматов), PaintShop Pro , PMView , Photoshop (плагины) и XnView , среди прочих, поддерживают XPM. [6] [7] Gravatar и picons также поддерживают XPM. [8] [9]
Уязвимость X11 libXpm была исправлена в 2005 году [10] и еще три в 2023 году. [ 11]
FFmpeg версии 3.3 или новее может декодировать XPM. [12]
{{cite book}}
: |work=
игнорируется ( помощь )значки представлены либо в монохромном формате XBM, либо в цветном формате XPM и GIF.
XPM-декодер