Метод IPrintOemUni::ImageProcessing (prcomoem.h)
Метод IPrintOemUni::ImageProcessing
можно использовать с принтерами с поддержкой Unidrv для изменения данных растрового изображения, чтобы выполнять форматирование цвета или полутонирование. Метод может вернуть измененное растровое изображение в Unidrv или отправить его непосредственно в средство spooler печати.
Синтаксис
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 описана в документации по пакету SDK для Microsoft Windows.
pColorTable
Указатель на цветовую таблицу, предоставленный вызывающим абонентом. Этот параметр используется только в том случае, если выходной формат составляет восемь битов на пиксель. Дополнительные сведения см. в следующем разделе "Примечания".
При интерпретации растрового изображения необходимо проверить таблицу цветов. Unidrv может изменять цвета в растровом рисунке, но он также будет вносить соответствующие корректировки в цветовую таблицу, что приведет к отсутствии чистого изменения. Однако если вы игнорируете изменения таблицы цветов и проверяете только растровое изображение, изображение может не печатать должным образом. Пример см. в обсуждении параметра pPaletteEntry в HT_Get8BPPMaskPalette.
dwCallbackID
Указанное вызывающее значение, назначенное атрибуту IPCallbackID атрибуту ipCallbackID для выбранного в данный момент параметра ColorMode. Дополнительные сведения см. в следующем разделе "Примечания".
pIPParams
[out] ppbResult
Указатель на расположение памяти, содержащее адрес буфера. Содержимое буфера зависит от места отправки преобразованного DIB.
Если этот метод намерен отправить преобразованный DIB обратно в Unidrv и успешно выполнен в преобразовании, он должен задать *ppbResult в адрес буфера, содержащего преобразованный DIB, и должен возвращать S_OK. Если преобразование завершается ошибкой, метод должен задать значение *ppbResult значение NULLи возвращать E_FAIL.
Если этот метод намерен отправить преобразованный DIB в spooler и успешно выполнен в преобразовании, метод должен задать *ppbResult для TRUEи должен возвращать S_OK. Если преобразование завершается ошибкой, метод должен задать значение *ppbResult значение FALSE и возвращать E_FAIL. Дополнительные сведения см. в обсуждении атрибутов #DevBPP и *Атрибуты DevNumOfPlan es в разделе "Примечания".
Возвращаемое значение
Метод должен возвращать одно из следующих значений.
Возвращаемый код | Описание |
---|---|
|
Операция завершилась успешно. |
|
Сбой операции. |
|
Метод не реализован. |
Характеристики растрового изображения источника
Характеристики растрового изображения назначения
Замечания
Метод IPrintOemUni::ImageProcessing
используется для изменения растровых изображений перед отправкой в средство spooler печати. Его цель — обеспечить настраиваемую поддержку цветовых режимов и полутонных методов, не поддерживаемых Unidrv. Драйвер принтера, отправляющий растровое изображение в средство spooler печати (в отличие от отправки его обратно в Unidrv), должен задать атрибуты *DevBPP и *DevNumOfPlanes равным нулю в файле GPD принтера.
Если метод реализован и если запись GPD-файла для текущего формата цвета содержит атрибут IPCallbackIDIPCallbackID, Unidrv вызывает метод при каждом наличии растрового изображения. Вызов выполняется после того, как GDI отрисовывает растровое изображение, которое затем отправляется в spooler. (Сведения о атрибуте IPCallbackID* см. в разделе Атрибуты параметра для компонента ColorMode.)
Если текущий режим цвета, указанный dwCallbackID, является одним из поддерживаемых Unidrv, то метод IPrintOemUni::ImageProcessing
должен выполнять полутонные операции с полученной растровой картой и возвращать его в Unidrv для spooling. Если текущий режим цвета является тем, что Unidrv не поддерживает, метод должен выполнять полутонные операции, а затем spool the bitmap.
Если метод выполняет только полутонные операции, он должен выполнить следующие действия:
- Выполняйте полутонные операции с данными, как указано pHalftoneOption члена структуры IPPARAMS.
- Верните измененные данные изображения в Unidrv, поместив его в буфер и указав адрес буфера в качестве возвращаемого значения метода. Возвращаемый буфер может быть одним, на который указывает pSrcBitmap, или он может быть локальным.
Для обработки настраиваемого форматирования цвета метод IPrintOemUni::ImageProcessing
должен выполнить следующее:
- Преобразуйте данные DIB, описанные pSrcBitmap и значения параметров pBitmapInfoHeader, в цветовый формат, указанный dwCallbackID.
- Выполняйте полутонные операции с данными, как указано pHalftoneOption члена структуры IPPARAMS.
- Отправьте данные в средство spooler печати, вызвав метод 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 (include Prcomoem.h) |