Condividi tramite


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)

Vedi anche

AlfaBlend

Strutture bitmap

Panoramica delle bitmap