Получение данных на 16 битов на цвет с растровой печатью CUPS
В версии 10.2 Mac OS X (Ягуар) Apple развернул систему печати CUPS как магистраль ее поддержки печати на Mac OS X. CUPS предлагает прямую модель программирования для записи драйверов принтера для поддержки растровых устройств вывода. Реализация CUPS в Ягуаре предложила поддержку многих цветовых пространств CUPS, включая RGB, Серый, Черный, и CMYK. В Ягуаре и в версии 10.3 Mac OS X (Пантера), поддерживаемые доступные пиксельные глубины составляли или 1 бит - или 8 битов на компонент цвета (cupsBitsPerColor значения), в зависимости от цветового пространства требуется. Технические Вопросы и ответы 1368 содержат таблицу цветовых пространств и битовых глубин, поддерживаемых реализацией CUPS в каждой версии Mac OS X.
Начиная с версии 10.4 Mac OS X (Тигр) разработчики, пишущие растровые драйвера принтера для системы печати CUPS, могут получить растровые растровые данные с 16 битами на компонент цвета. Работа с более глубокими пиксельными данными предлагает возможность для большей цветной точности и точности. Поддержка 16 битов на цвет ограничивается цветовыми пространствами CUPS CUPS_CSPACE_K, CUPS_CSPACE_W, CUPS_CSPACE_RGB, и CUPS_CSPACE_CMYK, с cupsColorOrder значение CUPS_ORDER_CHUNKED.
Порядок байтов (порядок байтов)
Для растровых данных, которые составляют 1 бит и 8 битов на компонент цвета, порядок байтов данных для данного компонента цвета однозначен, потому что данные компонента цвета для каждого пикселя составляют один байт или меньше в размере. Для данных на 16 битов на цвет значение цвета для данного компонента цвета составляет 2 байта, и порядок байтов определяется, чтобы быть собственным порядком байтов. Т.е. для данных на 16 битов на цвет при выполнении на машинах с обратным порядком байтов порядок байтов каждого значения компонента цвета является обратным порядком байтов. Для данных на 16 битов на цвет при выполнении на машинах с прямым порядком байтов порядок байтов каждого значения компонента цвета является прямым порядком байтов. Этот подход предлагает лучшую производительность, и большая часть прямой обработки данных передала фильтру CUPS, ожидающему получить растровые данные CUPS на 16 битов на цвет. Однако это означает, что Ваш фильтр CUPS, обрабатывающий данные на 16 битов на цвет, должен определить, соответствует ли архитектура производителя растровых данных архитектуру Вашего фильтра.
CUPS обеспечивает прямой способ определить, совпадает ли архитектура производителя растровых данных с Вашим фильтром, который обработает растр. cupsRasterOpen функционируйте возвращает a cups_raster_t структура, содержащая a sync поле, которое Вы используете для этого определения. Код для этого теста похож на это в Перечислении 1.
Перечисление 1 , Определяющее, необходим ли свопинг данных порядка байтов
bool isRasterEndianSwapNeeded(int in_fd) {
bool swap16BitData = false;
cups_raster_t *raster;
// in_fd is the input file descriptor for the file
// you are reading the raster from, e.g. stdin.
raster = cupsRasterOpen(in_fd, CUPS_RASTER_READ);
if(raster->sync == CUPS_RASTER_REVSYNC)
swap16BitData = true;
return swap16BitData;
} |
Когда sync поле в cups_raster_t возвращенный из cupsRasterOpen равно CUPS_RASTER_REVSYNC, архитектура фильтра, произведшего растровые данные и архитектуру Вашего фильтра, отличается, и необходимо подкачать 16-разрядные целочисленные данные, которые получает фильтр.
Запрашивать данные на 16 битов на цвет
Существует два метода, которые разработчики могут использовать, чтобы указать, что они хотят данные на 16 битов на цвет. То, какой метод является лучшим, зависит от того, предназначается ли драйвер, получающий данные, для работы версий до Тайгера.
Mac OS X 10.4 и более поздние системы только
Если Вы хотите получить растровые данные на 16 битов на цвет и только заботиться о работании на Вашем драйвере о системах, поддерживающих тот формат, можно просто указать a cupsBitsPerColor значение 16. Типичный способ сделать это находится в коде вызова для *ColorModel ключевое слово в файле PPD. Например, если бы Вы уже запрашивали 8 битов на компонент цвета, то Ваш файл PPD мог бы иметь строку такой как один показанный в Перечислении 2.
Перечисление 2 , Указывающее в PPD, регистрирует cupsBitsPerColor значение 8
*ColorModel RGB/RGB Color: "<</cupsColorSpace 1/cupsColorOrder 0/cupsBitsPerColor 8>>setpagedevice" |
Это указывает CUPS_CSPACE_RGB цветовое пространство, с короткими пикселями, с 8 битами на компонент цвета, который является цветными данными в формате:
RGBRGBRGB...
с каждым значением цвета в единственном байте.
Для указания тех же параметров, но с 16 битами на цвет Вы изменили бы эквивалентную строку в файле PPD, чтобы вместо этого читать как показано в Перечислении 3.
Перечисление 3 , Указывающее в PPD, регистрирует cupsBitsPerColor значение 16
*ColorModel RGB/RGB Color: "<</cupsColorSpace 1/cupsColorOrder 0/cupsBitsPerColor 16>>setpagedevice" |
Это указывает CUPS_CSPACE_RGB цветовое пространство, с короткими пикселями, с 16 битами на компонент цвета, который является цветными данными в формате:
RGBRGBRGB...
с каждым значением цвета, указанным как 2-байтовое целочисленное значение в формате порядка байтов узла.
Этот подход является прямым, но перестанет работать при выполнении на любой версии Mac OS X до Тигра или любого другого сервера печати CUPS, не поддерживающего a cupsBitsPerColor значение 16.
Совместимость с другими системами
Растровые драйвера принтера CUPS то использование cupsBitsPerColor со значением 16 перестанет работать на версиях Mac OS X до Тайгера, потому что те версии не поддерживают ту глубину цвета. Точно так же серверы печати CUPS в большинстве других систем не поддерживают a cupsBitsPerColor значение 16. Поэтому разработчики, хотящие быть совместимыми с этими другими системами, захотят использовать другой подход.
cupsPreferredBitsPerColor ключ был представлен, чтобы позволить драйверу указывать, что он предпочитает данные на 16 битов на компонент цвета. Этот ключ проигнорирован системами CUPS, не поддерживающими его. Типичное использование этого ключа находится в коде вызова для *ключевое слово ColorModel в файле PPD как показано в Перечислении 4.
Перечисление 4 , Указывающее, что 16 битов за цвет предпочтены при поддержании совместимости 8 битов за цвет для систем до Mac OS X 10.4
*ColorModel RGB/RGB Color: " <</cupsColorSpace 1/cupsColorOrder 0/cupsBitsPerColor 8 /cupsPreferredBitsPerColor 16>>setpagedevice" *End |
В системах, распознающих cupsPreferredBitsPerColor ключ, это указывает CUPS_CSPACE_RGB цветовое пространство, с короткими пикселями, с 16 битами на компонент цвета, который является цветными данными в формате:
RGBRGBRGB...
с каждым значением цвета, указанным как 2-байтовое целочисленное значение в формате порядка байтов узла. В системах, не поддерживающих cupsPreferredBitsPerColor ключ, это указывает данные на 8 битов на компонент цвета.
Версии CUPS, ничего не знающего о cupsPreferredBitsPerColor ключ просто проигнорирует его и снабдит растровыми данными на 8 битов на цвет. Версии, распознающие этот ключ и те данные поддержки 16 битов на компонент цвета, снабдят растровыми данными на 16 битов на цвет.
Драйвера принтера CUPS, указывающие их данные, запрашивают этот способ, которым MUST использует растровую структуру заголовка CUPS, предшествующую каждому растру страницы для определения формата растровых данных, предоставленных им. Если заголовок имеет header.cupsBitsPerColor набор значений к 8, растровые данные составляют 8 битов на цвет, т.е. система не может снабдить данными на 16 битов на цвет. Если заголовок имеет a header.cupsBitsPerColor значение 16, тогда растровые данные составляют 16 битов на компонент цвета.
Сводка
Версия 10.4 Mac OS X и позже имеет поддержку того, чтобы предоставить данные на 16 битов на компонент цвета растровым драйверам принтера CUPS. Использование в своих интересах данных глубокого цвета предлагает потенциал для превосходящих результатов данного устройства вывода. Можно запросить данные глубокого цвета способом, который совместим с установками CUPS, не поддерживающими их, позволяя развертывание единственного драйвера через широкий диапазон платформ и версий ОС.
История версии документа
| Дата | Примечания |
|---|---|
| 24.08.2005 | Новый документ, что, получая Данные на 16 битов на цвет с Растровой Печатью CUPS |