Struttura BLENDFUNCTION (wingdi.h)
La struttura BLENDFUNCTION controlla la fusione specificando le funzioni di fusione per le bitmap di origine e di destinazione.
Sintassi
typedef struct _BLENDFUNCTION {
BYTE BlendOp;
BYTE BlendFlags;
BYTE SourceConstantAlpha;
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION;
Members
BlendOp
Operazione di blend di origine. Attualmente, l'unica operazione di blend di origine e destinazione definita è AC_SRC_OVER. Per informazioni dettagliate, vedere la sezione Osservazioni seguenti.
BlendFlags
Deve essere zero.
SourceConstantAlpha
Specifica un valore di trasparenza alfa da utilizzare nell'intera bitmap di origine. Il valore SourceConstantAlpha viene combinato con qualsiasi valore alfa per pixel nella bitmap di origine. Se si imposta SourceConstantAlpha su 0, si presuppone che l'immagine sia trasparente. Impostare il valore SourceConstantAlpha su 255 (opaco) quando si vogliono usare solo i valori alfa per pixel.
AlphaFormat
Questo membro controlla il modo in cui vengono interpretate le bitmap di origine e di destinazione. AlphaFormat ha il valore seguente.
Valore | Significato |
---|---|
AC_SRC_ALPHA | Questo flag viene impostato quando la bitmap ha un canale Alfa, ovvero alfa per pixel. Si noti che le API usano alfa premultiplied, il che significa che i valori del canale rosso, verde e blu nella bitmap devono essere premultiplizzati con il valore del canale alfa. Ad esempio, se il valore del canale alfa è x, i canali rossi, verdi e blu devono essere moltiplicati per x e suddivisi per 0xff prima della chiamata. |
Commenti
Quando il membro AlphaFormat è AC_SRC_ALPHA, la bitmap di origine deve essere 32 bpp. In caso contrario, la funzione AlphaBlend avrà esito negativo.
Quando il membro BlendOp è AC_SRC_OVER, la bitmap di origine viene posizionata sulla bitmap di destinazione in base ai valori alfa dei pixel di origine.
Se la bitmap di origine non ha alcun valore alfa per pixel, ovvero AC_SRC_ALPHA non è impostato, il valore SourceConstantAlpha determina la fusione delle bitmap di origine e di destinazione, come illustrato nella tabella seguente. Si noti che la sca viene usata per SourceConstantAlpha qui. Inoltre, LA SCA è divisa per 255 perché ha un valore compreso tra 0 e 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 la bitmap di destinazione ha un canale alfa, la fusione è la seguente.
Dst.Alpha | = Src.Alpha * (SCA/255.0) | + Dst.Alpha * (1.0 - (SCA/255.0)) |
Se la bitmap di origine non usa SourceConstantAlpha ,ovvero è uguale a 0xFF), l'alfa per pixel determina la fusione delle bitmap di origine e di destinazione, come illustrato nella tabella seguente.
Dst.Red | = Src.Red | + (1 - Src.Alpha) * Dst.Red |
Dst.Green | = Src.Green | + (1 - Src.Alfa) * Dst.Green |
Dst.Blue | = Src.Blue | + (1 - Src.Alpha) * Dst.Blue |
Se la bitmap di destinazione ha un canale alfa, la fusione è la seguente.
Dest.alfa | = Src.Alpha | + (1 - SrcAlpha) * Dst.Alpha |
Se l'origine ha sia SourceConstantAlpha (ovvero non è 0xFF) sia alfa per pixel, l'origine viene pre-moltiplicata da SourceConstantAlpha e quindi la fusione si basa sull'alfa per pixel. Le tabelle seguenti mostrano questa operazione. Si noti che SourceConstantAlpha è diviso per 255 perché ha un valore compreso tra 0 e 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.Alfa) * Dst.Green |
Dst.Blue | = Src.Blue | + (1 - Src.Alpha) * Dst.Blue |
Dst.Alpha | = Src.Alpha | + (1 - Src.Alpha) * Dst.Alpha |
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Intestazione | wingdi.h (include Windows.h) |