Метод IPrintOemUni::ImageProcessing (prcomoem.h)
Метод IPrintOemUni::ImageProcessing
можно использовать с принтерами, поддерживаемыми Unidrv, для изменения данных растрового изображения, чтобы выполнить форматирование цвета или полутонирование. Метод может вернуть измененное растровое изображение в Unidrv или отправить его непосредственно в очередь печати печати.
Синтаксис
HRESULT ImageProcessing(
PDEVOBJ pdevobj,
PBYTE pSrcBitmap,
PBITMAPINFOHEADER pBitmapInfoHeader,
PBYTE pColorTable,
DWORD dwCallbackID,
PIPPARAMS pIPParams,
[out] OUT PBYTE *ppbResult
);
Параметры
pdevobj
Указатель на структуру DEVOBJ , предоставленный вызывающим объектом.
pSrcBitmap
Поставляемый вызывающим указателем на входной DIB.
pBitmapInfoHeader
Предоставленный вызывающим элементом указатель на структуру BITMAPINFOHEADER, описывающую растровое изображение, на которое указывает pSrcBitmap. Структура BITMAPINFOHEADER описана в документации по Microsoft Windows SDK.
pColorTable
Указатель на таблицу цветов, предоставленный вызывающим. Этот параметр используется только в том случае, если выходной формат составляет восемь бит на пиксель. Дополнительные сведения см. в разделе "Примечания".
При интерпретации растрового изображения необходимо изучить таблицу цветов. Unidrv может изменять цвета в растровом рисунке, но он также вносит соответствующие корректировки в таблицу цветов, что не приводит к чистому изменению. Однако если игнорировать изменения таблицы цветов и проверять только точечный рисунок, изображение может быть напечатано неправильно. Пример см. в описании параметра pPaletteEntry в HT_Get8BPPMaskPalette.
dwCallbackID
Заданное вызывающим объектом значение, присвоенное атрибуту *IPCallbackID выбранного в данный момент параметра для функции ColorMode. Дополнительные сведения см. в разделе "Примечания".
pIPParams
Предоставленный вызывающим элементом указатель на структуру IPPARAMS .
[out] ppbResult
Указатель на расположение памяти, содержащее адрес буфера. Содержимое буфера зависит от места отправки преобразованного DIB.
Если этот метод намерен отправить преобразованный DIB обратно в Unidrv и успешно преобразуется, он должен задать *ppbResult в качестве адреса буфера, содержащего преобразованный DIB, и возвращать S_OK. Если преобразование завершается сбоем, метод должен присвоить *ppbResult значение NULL и возвращать E_FAIL.
Если этот метод предназначен для отправки преобразованного DIB в очередь очереди печати и успешно выполняет преобразование, метод должен задать для параметра *ppbResultзначение TRUE и возвращать S_OK. Если преобразование завершается сбоем, метод должен задать для *ppbResultзначение FALSE и возвращать E_FAIL. Дополнительные сведения см. в описании атрибутов *DevBPP и *DevNumOfPlanes в разделе Примечания.
Возвращаемое значение
Метод должен возвращать одно из следующих значений.
Код возврата | Описание |
---|---|
|
Операция успешно выполнена. |
|
Операция не удалась. |
|
Метод не реализован. |
Характеристики исходного растрового изображения
Характеристики растрового изображения назначения
Комментарии
Метод IPrintOemUni::ImageProcessing
используется для изменения растровых изображений перед их отправкой в очередь печати печати. Его цель — обеспечить настраиваемую поддержку цветовых режимов и методов полутонирования, не поддерживаемых Unidrv. Драйвер принтера, который отправляет растровое изображение в очередь печати (в отличие от отправки обратно в Unidrv), должен задать атрибуты *DevBPP и *DevNumOfPlanes равным нулю в файле GPD принтера.
Если метод реализован и если запись файла GPD для текущего цветового формата содержит атрибут *IPCallbackID , Unidrv вызывает метод каждый раз, когда доступно растровое изображение. Вызов выполняется после того, как GDI отрисовывает точечный рисунок, который затем отправляется в диспетчер очереди печати. (Сведения об атрибуте *IPCallbackID см. в разделе Атрибуты параметра для функции ColorMode.)
Если текущий цветовой режим, указанный в dwCallbackID, поддерживается Unidrv, то IPrintOemUni::ImageProcessing
метод должен выполнять операции полутонирования для полученного растрового изображения и возвращать его в Unidrv для spooling. Если текущий цветовой режим не поддерживается в Unidrv, метод должен выполнять операции полутонирования, а затем подделывание растрового изображения.
Если метод выполняет только операции полутонирования, он должен выполнять следующие действия:
- Выполняйте операции полутонирования с данными, как указано элементом pHalftoneOption структуры IPPARAMS .
- Верните измененные данные изображения в Unidrv, поместив их в буфер и указав адрес буфера в качестве возвращаемого значения метода. Возвращаемый буфер может быть буфером, на который указывает pSrcBitmap, или локальным буфером.
Для обработки настраиваемого форматирования IPrintOemUni::ImageProcessing
цветов метод должен выполнять следующие действия.
- Преобразуйте данные DIB, описанные значениями параметров pSrcBitmap и pBitmapInfoHeader , в формат цвета, указанный dwCallbackID.
- Выполняйте операции полутонирования с данными, как указано элементом pHalftoneOption структуры IPPARAMS .
- Отправьте данные в очередь печати, вызвав метод IPrintOemDriverUni::D rvWriteSpoolBuf .
- Измените положение курсора принтера, выполнив соответствующие вызовы методов IPrintOemDriverUni::D rvXMoveTo и IPrintOemDriverUni::D rvYMoveTo .
Параметр dwCallbackID указывает тип форматирования цвета, если таковой имеется, который необходимо выполнить. В файле GPD принтера каждая запись *Option для функции ColorMode описывает формат цвета. Если формат требует обработки методом IPrintOemUni::ImageProcessing
, его запись *Option должна содержать атрибут *IPCallbackID . Когда Unidrv вызывает IPrintOemUni::ImageProcessing
метод , он предоставляет значение атрибута, связанное с выбранным в данный момент параметром для функции ColorMode. Это значение параметра dwCallbackID .
IPrintOemUni::ImageProcessing
Независимо от того, выполняет ли метод операции форматирования цвета и выполняет копирование данных изображения или просто выполняет операции полутонирования и возвращает обработанные растровые изображения в Unidrv, он должен экспортировать метод IPrintOemUni::MemoryUsage, если он выделяет значительные объемы памяти для целевых растровых изображений или других целей. В противном случае может снизиться производительность системы.
Если метод реализован, он вызывается для каждой растровой области на странице. Однако если область пуста, член bBlankBand структуры IPPARAMS имеет значение TRUE, что указывает, что блок пуст, а данные недопустимы. Так как полоса может быть разбита на чередующиеся блоки пустых и непустых областей для оптимизации производительности, размер блока не всегда соответствует размеру полосы.
Исходное растровое изображение, описанное pSrcBitmap и pBitmapInfoHeader , имеет следующие характеристики:
- Содержимое DIB упорядочено сверху вниз и несжато.
- Формат данных указан в разделе Обработка цветовых форматов.
- Если для формата требуется таблица цветов, на таблицу указывает pColorTable.
- Данные цвета приведены в PRIMARY_ORDER_CBA формате, как описано в описании элемента ulPrimaryOrder структуры GDIINFO . Другими словами, если цвет имеет формат RGB или CMY, наименьшие значения n битов должны содержать синее или желтое значение, следующие n битов должны содержать значение зеленого или пурпурного цвета, а следующие n битов должны содержать красное или голубое значение. Неиспользуемые биты находятся в наиболее значительном положении. Если формат использует 4 бита на пиксель, то n равно 1. Для 24 бит на пиксель n равно 8, как показано на следующем рисунке. Для CMYK четвертая группа из n битов содержит черный цвет.
На предыдущем рисунке показаны цветовые данные в формате PRIMARY_ORDER_CBA для двух пикселей с 24 битами цветовых данных на пиксель. Переход от адресов с низким объемом памяти к адресам с большим объемом памяти содержит восемь бит синих данных, затем восемь бит зеленых данных, а затем восемь бит красных данных, после чего шаблон повторяется. Это также называется порядком вывода устройств BGR.
Для операций полутонирования, в которых обработанное растровое изображение возвращается в Unidrv, возвращаемое растровое изображение должно иметь следующие характеристики:
- Содержимое DIB должно быть упорядочено сверху вниз и несжато.
- Формат данных должен быть указан в разделе Обработка цветовых форматов и должен быть совместим с атрибутами *DevBPP и *DevNumOfPlanes цветового формата, определяемого dwCallbackID. (Сведения об этих атрибутах см. в разделе Атрибуты параметра для функции ColorMode.)
- Если для формата требуется таблица цветов, необходимо создать таблицу и вернуть ее адрес в pColorTable.
- Данные цвета должны возвращаться в PRIMARY_ORDER_CBA формате, как описано для исходного растрового изображения.
-
Структура BITMAPINFOHEADER, определяемая pBitmapInfoHeader , должна описывать как входные, так и выходные растровые изображения. Метод
IPrintOemUni::ImageProcessing
не должен изменять содержимое структуры.
IPrintOemUni::ImageProcessing
является необязательным. Если подключаемый модуль отрисовки реализует этот метод, метод IPrintOemUni::GetImplementedMethod должен возвращать S_OK при получении "ImageProcessing" в качестве входных данных.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | prcomoem.h (включая Prcomoem.h) |