Структура BLENDFUNCTION (wingdi.h)
Структура BLENDFUNCTION управляет смешением, указывая функции смешения для исходных и целевых растровых изображений.
Синтаксис
typedef struct _BLENDFUNCTION {
BYTE BlendOp;
BYTE BlendFlags;
BYTE SourceConstantAlpha;
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION;
Члены
BlendOp
Операция исходного смешения. В настоящее время единственная операция смешения источника и назначения, которая была определена, — это AC_SRC_OVER. Дополнительные сведения см. в следующем разделе Примечаний.
BlendFlags
Должен равняться нулю.
SourceConstantAlpha
Задает значение альфа-прозрачности, которое будет использоваться для всего исходного растрового изображения. Значение SourceConstantAlpha объединяется с любыми альфа-значениями для каждого пикселя в исходном растровом рисунке. Если для параметра SourceConstantAlpha задано значение 0, предполагается, что изображение является прозрачным. Задайте для параметра SourceConstantAlpha значение 255 (непрозрачный), если требуется использовать только альфа-значения для каждого пикселя.
AlphaFormat
Этот элемент управляет способом интерпретации исходных и целевых растровых изображений. AlphaFormat имеет следующее значение.
Значение | Значение |
---|---|
AC_SRC_ALPHA | Этот флаг устанавливается, если растровое изображение имеет альфа-канал (то есть альфа-канал для каждого пикселя). Обратите внимание, что api-интерфейсы используют предварительно заполненный альфа-канал. Это означает, что значения красного, зеленого и синего каналов на растровом рисунке должны быть предварительно заполнены значением альфа-канала. Например, если значение альфа-канала равно x, красный, зеленый и синий каналы должны быть умножены на x и разделены на 0xff перед вызовом. |
Комментарии
Если элемент AlphaFormat AC_SRC_ALPHA, исходное растровое изображение должно быть 32 бит/с. Если это не так, функция AlphaBlend завершится ошибкой.
Если элемент BlendOp AC_SRC_OVER, исходное растровое изображение помещается поверх целевого растрового изображения на основе альфа-значений исходных пикселей.
Если исходное растровое изображение не имеет альфа-значения для каждого пикселя (то есть AC_SRC_ALPHA не задано), значение SourceConstantAlpha определяет сочетание исходного и целевого растровых изображений, как показано в следующей таблице. Обратите внимание, что здесь SCA используется для SourceConstantAlpha . Кроме того, SCA делится на 255, так как имеет значение в диапазоне от 0 до 255.
Dst.Red | = Src.Red * (SCA/255.0) | + Dst.Red * (1.0 – (SCA/255.0)) |
Dst.Green | = Src.Green * (SCA/255.0) | + Dst.Green * (1.0 – (SCA/255.0)) |
Dst.Blue | = Src.Blue * (SCA/255.0) | + Dst.Blue * (1.0 - (SCA/255.0)) |
Если целевое растровое изображение имеет альфа-канал, смешение выглядит следующим образом.
Dst.Alpha | = Src.Alpha * (SCA/255.0) | + Dst.Alpha * (1.0 – (SCA/255.0)) |
Если исходное растровое изображение не использует SourceConstantAlpha (то есть равно 0xFF), альфа-канал для каждого пикселя определяет сочетание исходного и целевого растровых изображений, как показано в следующей таблице.
Dst.Red | = Src.Red | + (1 - Src.Alpha) * Dst.Red |
Dst.Green | = Src.Green | + (1 - Src.Alpha) * Dst.Green |
Dst.Blue | = Src.Blue | + (1 - Src.Alpha) * Dst.Blue |
Если целевое растровое изображение имеет альфа-канал, смешение выглядит следующим образом.
Dest.alpha | = Src.Alpha | + (1 - SrcAlpha) * Dst.Alpha |
Если источник содержит и SourceConstantAlpha (т. е. не 0xFF), и альфа-канал на пиксель, источник предварительно умножается на SourceConstantAlpha , а затем смесь основывается на альфа-канале для каждого пикселя. Это показано в следующих таблицах. Обратите внимание, что SourceConstantAlpha делится на 255, так как имеет значение в диапазоне от 0 до 255.
Src.Red | = Src.Red | * SourceConstantAlpha / 255.0; |
Src.Green | = Src.Green | * SourceConstantAlpha / 255.0; |
Src.Blue | = Src.Blue | * SourceConstantAlpha / 255.0; |
Src.Alpha | = Src.Alpha | * SourceConstantAlpha / 255.0; |
Dst.Red | = Src.Red | + (1 - Src.Alpha) * Dst.Red |
Dst.Green | = Src.Green | + (1 - Src.Alpha) * Dst.Green |
Dst.Blue | = Src.Blue | + (1 - Src.Alpha) * Dst.Blue |
Dst.Alpha | = Src.Alpha | + (1 - Src.Alpha) * Dst.Alpha |
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | wingdi.h (включая Windows.h) |