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


Структура 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)

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

AlphaBlend

Структуры растровых рисунков

Общие сведения о точечных изображениях