Estrutura BLENDFUNCTION (wingdi.h)

A estrutura BLENDFUNCTION controla a mesclagem especificando as funções de mesclagem para bitmaps de origem e destino.

Sintaxe

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

Membros

BlendOp

A operação de combinação de origem. Atualmente, a única operação de combinação de origem e destino que foi definida é AC_SRC_OVER. Para obter detalhes, consulte a seção Comentários a seguir.

BlendFlags

Deve ser zero.

SourceConstantAlpha

Especifica um valor de transparência alfa a ser usado em todo o bitmap de origem. O valor SourceConstantAlpha é combinado com qualquer valor alfa por pixel no bitmap de origem. Se você definir SourceConstantAlpha como 0, supõe-se que sua imagem seja transparente. Defina o valor SourceConstantAlpha como 255 (opaco) quando você quiser usar apenas valores alfa por pixel.

AlphaFormat

Esse membro controla a maneira como os bitmaps de origem e de destino são interpretados. AlphaFormat tem o valor a seguir.

Valor Significado
AC_SRC_ALPHA Esse sinalizador é definido quando o bitmap tem um canal Alfa (ou seja, alfa por pixel). Observe que as APIs usam alfa pré-multiplicado, o que significa que os valores de canal vermelho, verde e azul no bitmap devem ser pré-multiplicados com o valor do canal alfa. Por exemplo, se o valor do canal alfa for x, os canais vermelho, verde e azul deverão ser multiplicados por x e divididos por 0xff antes da chamada.

Comentários

Quando o membro AlphaFormat é AC_SRC_ALPHA, o bitmap de origem deve ser 32 bpp. Se não estiver, a função AlphaBlend falhará.

Quando o membro blendop é AC_SRC_OVER, o bitmap de origem é colocado sobre o bitmap de destino com base nos valores alfa dos pixels de origem.

Se o bitmap de origem não tiver nenhum valor alfa por pixel (ou seja, AC_SRC_ALPHA não estiver definido), o valor SourceConstantAlpha determinará a mesclagem dos bitmaps de origem e destino, conforme mostrado na tabela a seguir. Observe que o SCA é usado para SourceConstantAlpha aqui. Além disso, o SCA é dividido por 255 porque tem um valor que varia de 0 a 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))
 

Se o bitmap de destino tiver um canal alfa, a combinação será a seguinte.

Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 – (SCA/255.0))
 

Se o bitmap de origem não usa SourceConstantAlpha (ou seja, é igual a 0xFF), o alfa por pixel determina a mistura dos bitmaps de origem e destino, conforme mostrado na tabela a seguir.

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
 

Se o bitmap de destino tiver um canal alfa, a combinação será a seguinte.

Dest.alpha = Src.Alpha + (1 – SrcAlpha) * Dst.Alpha
 

Se a origem tiver o SourceConstantAlpha (ou seja, não é 0xFF) e o alfa por pixel, a origem será pré-multiplicada pelo SourceConstantAlpha e, em seguida, a mistura será baseada no alfa por pixel. As tabelas a seguir mostram isso. Observe que SourceConstantAlpha é dividido por 255 porque tem um valor que varia de 0 a 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

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho wingdi.h (inclua Windows.h)

Confira também

Alphablend

Estruturas de bitmap

Visão geral do Bitmaps