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) |