XCB
XCB (X Cursor Bitmap) — это формат файлов растровых изображений, предназначенный для хранения курсоров мыши в операционной системе X Window System. Формат был разработан в конце 1980-х годов как часть стандартных инструментов X11 и до сих пор используется в большинстве Unix-подобных систем, включая дистрибутивы Linux, FreeBSD и OpenBSD. XCB-файлы содержат одно или несколько изображений курсора, а также метаданные, определяющие точку активации (hotspot) и, опционально, последовательность кадров для анимации.
История
XCB возник как развитие более раннего формата XBM (X BitMap), который использовался для хранения монохромных значков и курсоров. В отличие от XBM, поддерживающего только черно-белые изображения, XCB был расширен для работы с цветными курсорами и полупрозрачностью. Формат был стандартизирован в составе протокола X11 в 1987 году и оставался основным способом хранения курсоров в X Window System до появления более современных форматов, таких как PNG и SVG.
В 1990-х годах, с развитием графических оболочек (например, GNOME и KDE), XCB уступил место формату XCursor, который поддерживает большее количество цветов и более гибкую анимацию. Однако XCB продолжает использоваться в минималистичных средах рабочего стола, таких как Fluxbox, Openbox и i3, а также в системах, где важна обратная совместимость.
Структура файла
XCB-файл состоит из заголовка и одного или нескольких изображений. Заголовок содержит следующие поля:
- Магическое число (0x0001) — идентификатор формата.
- Размер заголовка — фиксированное значение (40 байт).
- Версия формата — обычно 1.
- Количество изображений — число хранящихся в файле курсоров (может быть 1 или более для анимации).
- Размер курсора — ширина и высота в пикселях (все изображения в одном файле имеют одинаковый размер).
Каждое изображение состоит из двух частей:
- Маска прозрачности — битовая карта, определяющая прозрачные пиксели.
- Цветовое изображение — массив пикселей, каждый из которых закодирован 24-битным RGB-значением (по 8 бит на красный, зеленый и синий каналы).
Данные хранятся в порядке следования строк сверху вниз, слева направо. Для уменьшения размера файла может использоваться сжатие RLE (Run-Length Encoding), но это не является обязательным.
Технические характеристики
- Глубина цвета: 24 бита (TrueColor).
- Прозрачность: битовая маска (1 бит на пиксель).
- Максимальный размер курсора: ограничен аппаратными возможностями X-сервера, но обычно не превышает 64×64 пикселя.
- Анимация: поддерживается через последовательность кадров, каждый из которых хранится как отдельное изображение. Время задержки между кадрами задается в метаданных (в миллисекундах).
- Точка активации (hotspot): координаты (x, y) относительно левого верхнего угла изображения, указывающие, где находится «кончик» курсора.
Применение
XCB-файлы используются для хранения курсоров в следующих сценариях:
- Системные курсоры — в X Window System по умолчанию используются курсоры из набора «cursor» (например, стрелка, песочные часы, текстовый курсор).
- Пользовательские темы — в окружениях рабочего стола, таких как Xfce, LXDE и MATE, можно заменить стандартные курсоры на XCB-наборы.
- Встраиваемые системы — благодаря простоте формата XCB часто применяется в устройствах с ограниченными ресурсами, где не требуется сложная графика.
- Игры и приложения — некоторые старые игры (например, Doom, Quake) используют XCB для отображения кастомных курсоров.
Сравнение с другими форматами
| Формат | Цветность | Прозрачность | Анимация | Сжатие | Совместимость |
|---|---|---|---|---|---|
| XCB | 24 бита | 1 бит (маска) | Да | RLE | X11, XFree86 |
| XBM | 1 бит | Нет | Нет | Нет | X11, XFree86 |
| XCursor | 32 бита | 8 бит (альфа) | Да | Нет | X11, XFree86 |
| PNG | 32 бита | 8 бит (альфа) | Да | Deflate | Универсальный |
XCB уступает XCursor по глубине цвета и качеству прозрачности, но выигрывает в простоте реализации и обратной совместимости с ранними версиями X11.
Инструменты для работы
- xcbgen — утилита для создания XCB-файлов из исходных изображений (входит в состав пакета
x11proto). - xcursorgen — конвертер из XCB в XCursor и обратно.
- xsetroot — команда для установки системного курсора из XCB-файла (например,
xsetroot -cursor mycursor.xcb). - GIMP — редактор изображений, поддерживающий импорт/экспорт XCB через плагин
xcb-plugin. - ImageMagick — библиотека, позволяющая конвертировать XCB в другие форматы (например,
convert input.xcb output.png).
Ограничения и критика
- Отсутствие альфа-канала — прозрачность реализована через битовую маску, что не позволяет создавать полупрозрачные элементы (например, тени или градиенты).
- Ограниченный размер — курсоры больше 64×64 пикселей могут некорректно отображаться на некоторых X-серверах.
- Устаревшая архитектура — формат не поддерживает современные возможности, такие как сглаживание (anti-aliasing) или масштабирование.
- Проблемы с анимацией — время задержки между кадрами задается в миллисекундах, но не все X-серверы корректно обрабатывают эти значения, что может приводить к неравномерной анимации.
Интересные факты
- XCB-файлы могут содержать до 255 изображений в одном файле, что позволяет создавать сложные анимации.
- В некоторых дистрибутивах Linux (например, Slackware) XCB оставался форматом по умолчанию для системных курсоров до середины 2000-х годов.
- Формат XCB используется в проекте «XFree86» (одна из первых свободных реализаций X Window System) для хранения курсоров, встроенных в X-сервер.
Источники
- X Window System Protocol Specification (X Consortium, 1987)
- Документация к пакету x11proto (X.Org Foundation)
- Руководство по формату XCB (FreeBSD Documentation Project)
- Статья «X Cursor Bitmap» в архиве X11R6 (The Open Group)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →