Le mélange Alpha d'une image bitmap


à l'Aide de AlphaBlend fonction dans Delphi
Alpha blending est utilisé pour afficher un alpha bitmap, qui est un
bitmap transparents ou semi-transparents les pixels.
En plus de rouge, de vert et de bleu canal de couleur, chaque pixel
dans un alpha de l'image a une transparence composant son canal alpha. Le canal alpha contient généralement autant de bits qu'un canal de couleur. Par exemple, un canal alpha 8 bits peut représenter 256 niveaux de transparence, de 0 (la totalité de l'image est transparente) à 255 (l'intégralité de l'image bitmap est opaque). Alpha blending mécanismes sont invoqués par l'appelant AlphaBlend fonction. Le AlphaBlend fonction affiche des images qui ont transparentes ou semi-transparentes pixels. Il n'est pas pris en charge sur Microsoft Windows 95 ou sur les versions de Microsoft Windows NT avant Microsoft Windows 2000.
L'exemple de code suivant divise la fenêtre en trois zones horizontales. Ensuite il dessine une image alpha blend dans chacune des zones de la fenêtre.
const
AC_SRC_ALPHA = $1
procédure DrawAlphaBlend (hWnd : HWND hdcwnd : HDC)
var
& ! & ! & ! & nbsp Ahdc : HDC // handle de la DC, nous allons créer
& ! & ! & ! & nbsp bf : BLENDFUNCTION // structure pour l'alpha blending
& ! & ! & ! & nbsp Ahbitmap : HBITMAP // bitmap poignée
& ! & ! & ! & nbsp imc : BITMAPINFO // bitmap en-tête
& ! & ! & ! & nbsp pvBits : pointeur // pointeur vers DIB section
& ! & ! & ! & nbsp ulWindowWidth,
& ! & ! & ! & nbsp ulWindowHeight : ULONG // la largeur de la fenêtre/hauteur
& ! & ! & ! & nbsp ulBitmapWidth,
& ! & ! & ! & nbsp ulBitmapHeight : ULONG / bitmap/ largeur/hauteur
& ! & ! & ! & nbsp rt : TRect // utilisé pour obtenir les dimensions de la fenêtre
begin
& ! & ! & ! & nbsp // obtenir les dimensions de la fenêtre
& ! & ! & ! & nbsp GetClientRect(hWnd, rt)
& ! & ! & ! & nbsp // calcul de la largeur de la fenêtre/hauteur
& ! & ! & ! & nbsp ulWindowWidth := rt.droit - rt.gauche
& ! & ! & ! & nbsp ulWindowHeight := rt.bas - rt.top
& ! & ! & ! & nbsp // assurez-vous que nous sommes au moins certains de la taille de la fenêtre
& ! & ! & ! & nbsp si ((ulWindowWidth = 0 ) et (ulWindowHeight=0)) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & nbsp // diviser la fenêtre en 3 zones horizontales
& ! & ! & ! & nbsp ulWindowHeight := trunc(ulWindowHeight / 3)
& ! & ! & ! & nbsp // création d'un DC pour notre bitmap-la source DC pour AlphaBlend
& ! & ! & ! & nbsp Ahdc := CreateCompatibleDC(hdcwnd)
& ! & ! & ! & nbsp // égal à zéro la mémoire de l'image bitmap info
& ! & ! & ! & nbsp ZeroMemory(@imc, sizeof(BITMAPINFO))
& ! & ! & ! & nbsp // configuration bitmap info
& ! & ! & ! & nbsp imc.bmiHeader.biSize := sizeof(BITMAPINFOHEADER)

& ! & ! & ! & nbsp imc.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& ! & ! & ! & nbsp ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& ! & ! & ! & nbsp imc.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& ! & ! & ! & nbsp ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& ! & ! & ! & nbsp imc.bmiHeader.les biplans := 1
& ! & ! & ! & nbsp imc.bmiHeader.valeur bibitcount := 32 // quatre de 8 bits composants
& ! & ! & ! & nbsp imc.bmiHeader.biCompression := BI_RGB
& ! & ! & ! & nbsp imc.bmiHeader.biSizeImage := ulBitmapWidth * ulBitmapHeight * 4
& ! & ! & ! & nbsp // création de notre section DIB et sélectionnez le bitmap dans le dc
& ! & ! & ! & nbsp Ahbitmap := CreateDIBSection(Ahdc, imc, DIB_RGB_COLORS, pvBits, 0, 0)
& ! & ! & ! & nbsp SelectObject(Ahdc, Ahbitmap)
& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $7f // la moitié de la valeur 0xff = 50% de transparence
& ! & ! & ! & nbsp bf.AlphaFormat := 0 // ignorer la source de canal alpha
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapWidth, ulBitmapHeight,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)

& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.AlphaFormat := AC_SRC_ALPHA // utilisation d'une source alpha
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $ff // opaque (désactiver constante alpha)
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& ! & ! & ! & ! & nbsp trunc(ulWindowHeight/5 ulWindowHeight), ulBitmapWidth, ulBitmapHeight,
& ! & ! & ! & ! & ! & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.AlphaFormat := 0
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $3A
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp trunc(ulWindowHeight/5 2*ulWindowHeight), ulBitmapWidth,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapHeight, bf)
& ! & ! & ! & nbsp // effectuer le nettoyage
& ! & ! & ! & nbsp DeleteObject(Ahbitmap)
& ! & ! & ! & nbsp DeleteDC(Ahdc)
fin









Le melange Alpha d'une image bitmap


Le melange Alpha d'une image bitmap : Plusieurs milliers de conseils pour vous faciliter la vie.


a l'Aide de AlphaBlend fonction dans Delphi
Alpha blending est utilise pour afficher un alpha bitmap, qui est un
bitmap transparents ou semi-transparents les pixels.
En plus de rouge, de vert et de bleu canal de couleur, chaque pixel
dans un alpha de l'image a une transparence composant son canal alpha. Le canal alpha contient generalement autant de bits qu'un canal de couleur. Par exemple, un canal alpha 8 bits peut representer 256 niveaux de transparence, de 0 (la totalite de l'image est transparente) a 255 (l'integralite de l'image bitmap est opaque). Alpha blending mecanismes sont invoques par l'appelant AlphaBlend fonction. Le AlphaBlend fonction affiche des images qui ont transparentes ou semi-transparentes pixels. Il n'est pas pris en charge sur Microsoft Windows 95 ou sur les versions de Microsoft Windows NT avant Microsoft Windows 2000.
L'exemple de code suivant divise la fenetre en trois zones horizontales. Ensuite il dessine une image alpha blend dans chacune des zones de la fenetre.
const
AC_SRC_ALPHA = $1
procedure DrawAlphaBlend (hWnd : HWND hdcwnd : HDC)
var
& ! & ! & ! & nbsp Ahdc : HDC // handle de la DC, nous allons creer
& ! & ! & ! & nbsp bf : BLENDFUNCTION // structure pour l'alpha blending
& ! & ! & ! & nbsp Ahbitmap : HBITMAP // bitmap poignee
& ! & ! & ! & nbsp imc : BITMAPINFO // bitmap en-tete
& ! & ! & ! & nbsp pvBits : pointeur // pointeur vers DIB section
& ! & ! & ! & nbsp ulWindowWidth,
& ! & ! & ! & nbsp ulWindowHeight : ULONG // la largeur de la fenetre/hauteur
& ! & ! & ! & nbsp ulBitmapWidth,
& ! & ! & ! & nbsp ulBitmapHeight : ULONG / bitmap/ largeur/hauteur
& ! & ! & ! & nbsp rt : TRect // utilise pour obtenir les dimensions de la fenetre
begin
& ! & ! & ! & nbsp // obtenir les dimensions de la fenetre
& ! & ! & ! & nbsp GetClientRect(hWnd, rt)
& ! & ! & ! & nbsp // calcul de la largeur de la fenetre/hauteur
& ! & ! & ! & nbsp ulWindowWidth := rt.droit - rt.gauche
& ! & ! & ! & nbsp ulWindowHeight := rt.bas - rt.top
& ! & ! & ! & nbsp // assurez-vous que nous sommes au moins certains de la taille de la fenetre
& ! & ! & ! & nbsp si ((ulWindowWidth = 0 ) et (ulWindowHeight=0)) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & nbsp // diviser la fenetre en 3 zones horizontales
& ! & ! & ! & nbsp ulWindowHeight := trunc(ulWindowHeight / 3)
& ! & ! & ! & nbsp // creation d'un DC pour notre bitmap-la source DC pour AlphaBlend
& ! & ! & ! & nbsp Ahdc := CreateCompatibleDC(hdcwnd)
& ! & ! & ! & nbsp // egal a zero la memoire de l'image bitmap info
& ! & ! & ! & nbsp ZeroMemory(@imc, sizeof(BITMAPINFO))
& ! & ! & ! & nbsp // configuration bitmap info
& ! & ! & ! & nbsp imc.bmiHeader.biSize := sizeof(BITMAPINFOHEADER)

& ! & ! & ! & nbsp imc.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& ! & ! & ! & nbsp ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2)
& ! & ! & ! & nbsp imc.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& ! & ! & ! & nbsp ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2)
& ! & ! & ! & nbsp imc.bmiHeader.les biplans := 1
& ! & ! & ! & nbsp imc.bmiHeader.valeur bibitcount := 32 // quatre de 8 bits composants
& ! & ! & ! & nbsp imc.bmiHeader.biCompression := BI_RGB
& ! & ! & ! & nbsp imc.bmiHeader.biSizeImage := ulBitmapWidth * ulBitmapHeight * 4
& ! & ! & ! & nbsp // creation de notre section DIB et selectionnez le bitmap dans le dc
& ! & ! & ! & nbsp Ahbitmap := CreateDIBSection(Ahdc, imc, DIB_RGB_COLORS, pvBits, 0, 0)
& ! & ! & ! & nbsp SelectObject(Ahdc, Ahbitmap)
& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $7f // la moitie de la valeur 0xff = 50% de transparence
& ! & ! & ! & nbsp bf.AlphaFormat := 0 // ignorer la source de canal alpha
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapWidth, ulBitmapHeight,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)

& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.AlphaFormat := AC_SRC_ALPHA // utilisation d'une source alpha
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $ff // opaque (desactiver constante alpha)
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& ! & ! & ! & ! & nbsp trunc(ulWindowHeight/5 ulWindowHeight), ulBitmapWidth, ulBitmapHeight,
& ! & ! & ! & ! & ! & nbsp Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf)
& ! & ! & ! & nbsp bf.BlendOp := AC_SRC_OVER
& ! & ! & ! & nbsp bf.BlendFlags := 0
& ! & ! & ! & nbsp bf.AlphaFormat := 0
& ! & ! & ! & nbsp bf.SourceConstantAlpha := $3A
& ! & ! & ! & nbsp AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp trunc(ulWindowHeight/5 2*ulWindowHeight), ulBitmapWidth,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ulBitmapHeight, bf)
& ! & ! & ! & nbsp // effectuer le nettoyage
& ! & ! & ! & nbsp DeleteObject(Ahbitmap)
& ! & ! & ! & nbsp DeleteDC(Ahdc)
fin


Le mélange Alpha d'une image bitmap

Le mélange Alpha d'une image bitmap : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation