Поделиться через


Функция DrvPlgBlt (winddi.h)

Функция DrvPlgBlt предоставляет возможности ротации битовых блоков между сочетаниями управляемых устройством и GDI поверхностей.

Синтаксис

BOOL DrvPlgBlt(
  [in, out]      SURFOBJ         *psoTrg,
  [in, out]      SURFOBJ         *psoSrc,
  [in, optional] SURFOBJ         *psoMsk,
  [in]           CLIPOBJ         *pco,
  [in, optional] XLATEOBJ        *pxlo,
  [in, optional] COLORADJUSTMENT *pca,
  [in, optional] POINTL          *pptlBrushOrg,
  [in]           POINTFIX        *pptfx,
  [in]           RECTL           *prcl,
  [in, optional] POINTL          *pptl,
  [in]           ULONG           iMode
);

Параметры

[in, out] psoTrg

Указатель на структуру SURFOBJ , описывающую поверхность, на которой выполняется рисование.

[in, out] psoSrc

Указатель на структуру SURFOBJ, которая описывает источник для операции передачи битовых блоков.

[in, optional] psoMsk

Указатель на необязательную структуру SURFOBJ, представляющую маску для источника. Он определяется схемой логики, которая представляет собой точечный рисунок с одним битом на пиксель.

Эта маска ограничивает область копируемых источников. Маска имеет неявный rop4 0xCCAA, что означает, что источник должен быть скопирован, где маска равна 1, но назначение должно оставаться в покое, где маска равна нулю.

Если этот параметр имеет значение NULL, rop4 неявно 0xCCCC, что означает, что источник должен быть скопирован везде в исходном прямоугольнике.

Маска всегда достаточно велика, чтобы содержать соответствующий источник; плитка не требуется.

[in] pco

Указатель на структуру CLIPOBJ , ограничивающую область назначения для изменения. Функции GDI перечисляют обрезную область в виде набора прямоугольников.

По возможности GDI упрощает обрезку. В отличие от функции DrvBitBlt , DrvPlgBlt можно вызывать с помощью одного прямоугольника обрезки. Это предотвращает ошибки округления при обрезке выходных данных.

[in, optional] pxlo

Указатель на структуру XLATEOBJ , которая определяет способ преобразования цветовых индексов между исходной и целевой поверхностями. Кроме того, можно запросить XLATEOBJ, чтобы найти цвет RGB для любого исходного индекса. Если pxlo имеет значение NULL, преобразование не требуется.

Для интерполяции цветов требуется высококачественная ротация битовых блоков.

[in, optional] pca

Указатель на структуру COLORADJUSTMENT, которая определяет значения настройки цвета, применяемые к исходному растровом рисунку перед растяжением битов. Дополнительные сведения об этой структуре см. в документации по Microsoft Windows SDK.

[in, optional] pptlBrushOrg

Указатель на структуру BRUSHOBJ , указывающую начало кисти полутонов. Драйверы устройств, использующие полутоновые кисти, должны выравнивать верхний левый пиксель шаблона кисти с этой точкой на поверхности устройства.

[in] pptfx

Указатель на три структуры POINTFIX, которые определяют параллелограмм в области назначения. Определите pptfx[0] как A, pptfx[1] как B и pptfx[2] как C. A, B и C определяют три вершины параллелограмма. Четвертая неявная вершина присваивается следующим образом:

    D = B + C − A

DrvPlgBlt никогда не вызывается с помощью коллинеара A, B и C.

[in] prcl

Указатель на структуру RECTL , которая определяет копируемые области в системе координат исходной поверхности. Точки исходного прямоугольника хорошо упорядочены. DrvPlgBlt никогда не получит пустой исходный прямоугольник.

[in, optional] pptl

Указатель на структуру POINTL , которая указывает, какой пиксель в заданной маске соответствует верхнему левому пикселю в исходном прямоугольнике. Игнорируйте этот параметр, если psoMsk не указан.

[in] iMode

Определяет, как объединяются исходные пиксели для получения выходных пикселей. Значение может быть одним из следующих.

Значение Значение
BLACKONWHITE При сжатии битового блока пиксели должны быть объединены с операцией AND. При растягивая передача битового блока пиксели должны быть реплицированы.
COLORONCOLOR При сжатой передаче битового блока следует игнорировать достаточное количество пикселей, чтобы не объединять пиксели. При растягивая передача битового блока пиксели должны быть реплицированы.
ПОЛУТОНАХ Драйвер может использовать группы пикселей на выходной поверхности, чтобы наилучшим образом приблизить цвет или серый уровень входных данных.
WHITEONBLACK При сжатии битового блока пиксели должны быть объединены с операцией OR. При растягивая передача битового блока пиксели должны быть реплицированы.
 

Методы WHITEONBLACK, BLACKONWHITE и COLORONCOLOR обеспечивают совместимость для старых приложений, но не дают наилучших результатов для цветовых поверхностей.

Возвращаемое значение

DrvPlgBlt возвращает значение TRUE при успешном выполнении. В противном случае он сообщает об ошибке и возвращает значение FALSE.

Комментарии

Как и DrvStretchBlt, DrvPlgBlt позволяет драйверу устройства записывать в точечные изображения GDI, особенно если драйвер может выполнять полутонирование.

Для преобразования растрового изображения эта функция выполняет передачу битовых блоков из прямоугольника, определенного prcl, в любой параллелограмм. Параллелограмм определяется pptfx, который указывает на массив из трех точек.

Исходный прямоугольник в prcl считается геометрическим прямоугольником, углы которого смещаются на (-0,5,-0,5) из заданных целочисленных координат. Это точно соответствует исходному прямоугольнику для DrvStretchBlt. Исходный прямоугольник всегда хорошо упорядочен.

Левый верхний угол исходного прямоугольника сопоставляется с первой точкой A. Правый верхний угол исходного прямоугольника сопоставляется со второй точкой B. Левый нижний угол исходного прямоугольника сопоставляется с третьей точкой C. Правый нижний угол исходного прямоугольника сопоставляется с неявной точкой параллелограмма, определяемой путем обработки трех заданных точек как векторов и вычислений:

    D = B + C - A

Обратите внимание, что растяжение blt может быть выражено точно как параллелограммный blt, но координаты, заданные для назначения, будут иметь дробную часть 0,5.

DrvPlgBlt является необязательным для графических драйверов. Он предоставляется только для определенных типов поворота. Драйвер должен вызвать EngPlgBlt , если drvPlgBlt вызывается для выполнения операций, которые он не поддерживает.

Требования

   
Целевая платформа Персональный компьютер
Верхняя часть winddi.h (включая Winddi.h)

См. также раздел

DrvAlphaBlend

DrvBitBlt

DrvStretchBlt

DrvStretchBltROP

DrvTransparentBlt

EngAlphaBlend

EngBitBlt

EngPlgBlt

EngStretchBlt

EngStretchBltROP

EngTransparentBlt