Partager via


STRUCTURE BLENDFUNCTION (wingdi.h)

La structure BLENDFUNCTION contrôle la fusion en spécifiant les fonctions de fusion pour les bitmaps sources et de destination.

Syntaxe

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

Membres

BlendOp

Opération de fusion source. Actuellement, la seule opération de fusion source et de destination qui a été définie est AC_SRC_OVER. Pour plus d’informations, consultez la section Remarques suivante.

BlendFlags

Doit être zéro.

SourceConstantAlpha

Spécifie une valeur de transparence alpha à utiliser sur l’ensemble de la bitmap source. La valeur SourceConstantAlpha est combinée avec toutes les valeurs alpha par pixel dans la bitmap source. Si vous définissez SourceConstantAlpha sur 0, il est supposé que votre image est transparente. Définissez la valeur SourceConstantAlpha sur 255 (opaque) lorsque vous souhaitez utiliser uniquement des valeurs alpha par pixel.

AlphaFormat

Ce membre contrôle la façon dont les bitmaps sources et de destination sont interprétées. AlphaFormat a la valeur suivante.

Valeur Signification
AC_SRC_ALPHA Cet indicateur est défini lorsque la bitmap a un canal Alpha (c’est-à-dire, par pixel alpha). Notez que les API utilisent l’alpha prémultiplié, ce qui signifie que les valeurs de canal rouge, vert et bleu de la bitmap doivent être prémultipliées avec la valeur du canal alpha. Par exemple, si la valeur du canal alpha est x, les canaux rouge, vert et bleu doivent être multipliés par x et divisés par 0xff avant l’appel.

Remarques

Lorsque le membre AlphaFormat est AC_SRC_ALPHA, la bitmap source doit être de 32 bpp. Si ce n’est pas le cas, la fonction AlphaBlend échoue.

Lorsque le membre BlendOp est AC_SRC_OVER, la bitmap source est placée sur l’image bitmap de destination en fonction des valeurs alpha des pixels sources.

Si la bitmap source n’a aucune valeur alpha par pixel (autrement dit, AC_SRC_ALPHA n’est pas définie), la valeur SourceConstantAlpha détermine le mélange des bitmaps source et de destination, comme indiqué dans le tableau suivant. Notez que SCA est utilisé pour SourceConstantAlpha ici. En outre, le SCA est divisé par 255, car il a une valeur comprise entre 0 et 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))
 

Si la bitmap de destination a un canal alpha, le mélange est le suivant.

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

Si la bitmap source n’utilise pas SourceConstantAlpha (autrement dit, elle est égale à 0xFF), l’alpha par pixel détermine le mélange des bitmaps source et de destination, comme indiqué dans le tableau suivant.

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
 

Si la bitmap de destination a un canal alpha, le mélange est le suivant.

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

Si la source a à la fois l’alpha SourceConstantAlpha (autrement dit, elle n’est pas 0xFF) et l’alpha par pixel, la source est pré-multipliée par sourceConstantAlpha , puis le mélange est basé sur l’alpha par pixel. Les tableaux suivants le montrent. Notez que SourceConstantAlpha est divisé par 255, car sa valeur est comprise entre 0 et 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

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
En-tête wingdi.h (inclure Windows.h)

Voir aussi

AlphaBlend

Bitmap Structures

Vue d’ensemble des bitmaps