Функция DrvStretchBltROP (winddi.h)
Функция DrvStretchBltROP выполняет растягивающую передачу битовых блоков с помощью ROP.
Синтаксис
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
Параметры
[in, out] psoDest
Указатель на структуру SURFOBJ , которая описывает поверхность для рисования.
[in, out] psoSrc
Указатель на структуру SURFOBJ, которая описывает исходную поверхность для передачи битовых блоков.
[in, optional] psoMask
Указатель на структуру SURFOBJ, которая определяет маску для источника. Маска определяется логической картой, которая представляет собой растровое изображение с одним битом на пиксель. Как правило, маска ограничивает область, изменяемую на целевой поверхности. Эта маска всегда имеет тот же размер, что и исходная поверхность.
[in] pco
Указатель на структуру CLIPOBJ , ограничивающую область, которая должна быть изменена в назначении. Подпрограммы службы CLIPOBJ_Xxx предоставляются для перечисления области клипа в виде набора прямоугольников.
По возможности GDI упрощает обрезку. Однако, в отличие от DrvBitBlt, DrvStretchBltROP можно вызывать с помощью одного прямоугольника обрезки. Это предотвращает ошибки округления при обрезке выходных данных.
[in, optional] pxlo
Указатель на структуру XLATEOBJ , указывающую способ преобразования цветовых индексов между исходной и целевой поверхностями. Если pxlo имеет значение NULL, перевод не требуется.
Эту структуру XLATEOBJ также можно запросить, чтобы найти цвет RGB для любого исходного индекса. Высококачественная растягивающая передача битовых блоков в некоторых случаях потребует интерполяции цветов.
[in, optional] pca
Указатель на структуру COLORADJUSTMENT, которая определяет значения корректировки цвета, применяемые к исходному растровом рисунку перед растягиванием битов. Дополнительные сведения см. в документации по Microsoft Windows SDK.
[in] pptlHTOrg
Указатель на структуру POINTL , которая определяет источник полутоновой кисти на целевой поверхности. При использовании полутоновых кистей драйвер должен выровнять верхний левый пиксель кисти с этой точкой и повторить кисть в соответствии с ее размерами. Драйвер должен игнорировать этот параметр, если для параметра rop4 не требуется шаблон.
[in] prclDest
Указатель на структуру RECTL , которая определяет прямоугольную область для изменения. Этот прямоугольник задается в системе координат целевой поверхности и определяется двумя точками: верхней левой и нижней правой. Две точки, определяющие прямоугольник, не всегда хорошо упорядочены, а это означает, что координаты второй точки не обязательно больше, чем координаты первой точки. Драйвер должен заменить два значения x и (или) два значения y , если прямоугольник назначения неправильно упорядочен.
Прямоугольник является эксклюзивным в нижнем правом углу; то есть нижний и правый края не являются частью копии.
DrvStretchBltROP никогда не вызывается с пустым прямоугольником назначения.
[in] prclSrc
Указатель на структуру RECTL, которая определяет копируемые области. Этот прямоугольник задается в системе координат исходной поверхности и определяется двумя точками: верхней левой и нижней правой. Две точки, определяющие прямоугольник, всегда хорошо упорядочены.
Прямоугольник является эксклюзивным в нижнем правом углу; то есть его нижний и правый края не являются частью копии.
Драйвер должен сопоставить этот прямоугольник с прямоугольником, определенным prclDest.
[in, optional] pptlMask
Указатель на структуру POINTL, определяющую пиксель в маске, на которую указывает prclMask . Этот пиксель соответствует верхнему левому пикселю в исходном прямоугольнике, на который указывает prclSrc . Драйвер должен игнорировать этот параметр, если маска не указана.
[in] iMode
Указывает, как исходные пиксели объединяются для получения выходных пикселей. Режим HALFTONE медленнее, чем в других режимах, но создает изображения более высокого качества. Этот параметр может иметь одно из следующих значений:
Значение | Значение |
---|---|
BLACKONWHITE | При сжатии битовых блоков пиксели должны сочетаться с операцией BOOLEAN AND. При растягивая передачу битовых блоков пиксели должны реплицироваться. |
COLORONCOLOR | При сжатии битовых блоков достаточное количество пикселей должно игнорироваться, поэтому их не нужно объединять. При растягивая передачу битовых блоков пиксели должны реплицироваться. |
ПОЛУТОНАХ | Драйвер может использовать группы пикселей в выходной поверхности, чтобы наилучшим образом приблизить цвет или серый уровень входных данных. |
WHITEONBLACK | При сжатии битовых блоков пиксели должны объединяться с логической операцией OR. При растягивая передачу битовых блоков пиксели должны реплицироваться. |
[in] pbo
Указатель на структуру BRUSHOBJ, которая будет использоваться для определения шаблона для передачи битовых блоков. Подпрограмма обслуживания BRUSHOBJ_pvGetRbrush GDI извлекает реализацию кисти устройства. Драйвер может игнорировать этот параметр, если для параметра rop4 не требуется шаблон.
[in] rop4
Представляет растровую операцию, которая определяет, как маски, шаблон, исходные и целевые пиксели объединяются для записи выходного пикселя на целевую поверхность.
Это четвертичная растровая операция, которая является естественным продолжением обычной тернарной операции Rop3. Rop4 имеет 16 соответствующих битов, которые аналогичны 8 определяющим битам Rop3. (Другие избыточные биты Rop3 игнорируются.) Самый простой способ реализации Rop4 — отдельно рассмотреть его 2 байта. Нижний байт указывает Rop3, который должен вычисляться везде, где маска, на которую указывает psoMask , равно 1. Высокий байт указывает Rop3, который можно вычислить и применить везде, где маска равна нулю.
Возвращаемое значение
DrvStretchBltROP должен возвращать значение TRUE при успешном выполнении. В противном случае он должен сообщить код ошибки и вернуть значение FALSE.
Комментарии
Сопоставление определяется с помощью prclSrc и prclDest. Точки, указанные в prclDest и prclSrc , находятся на целочисленных координатах, которые соответствуют пиксельным центрам. Прямоугольник, определенный двумя такими точками, считается геометрическим прямоугольником с двумя вершинами, координаты которых являются заданными точками, но с 0,5, вычитаемыми из каждой координаты. (Структуры POINTL представляют собой сокращенную нотацию для указания этих дробных вершин координат.)
Драйвер может при необходимости реализовать DrvStretchBltROP. Если драйвер перехватывает этот вызов, он может вызвать EngStretchBltROP для выполнения тех операций растягивания щелей, которые он не поддерживает.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | winddi.h (включая Winddi.h) |