Функция BLENDFUNCTION


Структура BLENDFUNCTION управляет плавным переходом цвета и тона, устанавливая функции сопряжения  для источниковых и принимающих точечных рисунков.

Синтаксис

typedef struct _BLENDFUNCTION {
  BYTE     BlendOp;
  BYTE     BlendFlags;
  BYTE     SourceConstantAlpha;
  BYTE     AlphaFormat;
}BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;

Члены структуры

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 бита на пиксель (bpp). Если это не так, функция 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

где,
Src.Red - источник красного;
Src.Green - источник зеленого;
Src.Blue - источник синего;
Src.Alpha - источник α-уровня непрозрачности;
Dst.Red - приемник красного;
Dst.Green - приемник зеленого;
Dst.Blue - приемник синего;
Dst.Alpha - приемник α-уровня непрозрачности;

Смотри также 

Обзор Точечные рисунки, Структуры, используемые точечными рисунками, AlphaBlend

Размещение и совместимость BLENDFUNCTION

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Нет

Windows Me

Да

Windows 98

Да

Windows 95

Нет

Используемая библиотека

Нет

Заголовочный файл

 

- объявлено в

Wingdi.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz