Alpha-blending eine bitmap
AlphaBlend Funktion in Delphi
Alpha-blending wird verwendet, um eine alpha-Bitmap anzuzeigen, das ist ein
Bitmap, die transparente oder halbtransparente Pixel hat.
Neben einer roten, grünen und blauen Farbkanal, jedes pixel
in einer alpha-Bitmap hat eine Transparenz-Komponente, die als alpha-Kanal bekannt. Der alpha-Kanal enthält in der Regel so viele Bits als ein Farbkanal. Beispielsweise kann ein 8-Bit alpha-Kanal 256 Stufen der Transparenz von 0 (das gesamte Bitmap ist transparent) bis 255 darstellen, (das gesamte Bitmap ist undurchsichtig). Alpha blending Mechanismen werden aufgerufen, indem AlphaBlend Funktion aufgerufen wird. Die AlphaBlend-Funktion zeigt Bitmaps, die transparenten oder halbtransparenten Pixel haben. Unter Microsoft Windows 95 oder auf Versionen von Microsoft Windows NT vor Microsoft Windows 2000 wird nicht unterstützt.
Das folgende Codebeispiel teilt ein Fenster in drei horizontale Bereiche. Dann zieht es eine Alpha-blending-Bitmap in jedem Bereich, Fenster.
const
AC_SRC_ALPHA = $1;
Prozedur DrawAlphaBlend (hWnd: HWND; Hdcwnd: HDC);
var
Ahdc: HDC; Handle der DC-wir erstellen
BF: BLENDFUNCTION; Struktur für alpha-blending
Ahbitmap: HBITMAP; Bitmap-handle
BMI: BITMAPINFO; Bitmapheader
PvBits: Zeiger; Zeiger auf DIB-Abschnitt
UlWindowWidth,
UlWindowHeight: ULONG; Breite/Höhe des Fensters
UlBitmapWidth,
UlBitmapHeight: ULONG; Bitmap-Breite/Höhe
RT: TRect; verwendet für immer Fenster Abmessungen
beginnen
Fenster-Dimensionen zu erhalten
GetClientRect (hWnd, rt);
Breite/Höhe des Fensters berechnen
UlWindowWidth: = rt.right - rt.left;
UlWindowHeight: = rt.bottom - rt.top;
Stellen Sie sicher, haben wir zumindest einige Fenstergröße
Wenn ((ulWindowWidth = 0) und (UlWindowHeight = 0)) dann
Ausfahrt;
unterteilen Sie das Fenster in 3 horizontale Bereiche
UlWindowHeight: = trunc(ulWindowHeight / 3);
Erstellen Sie einen DC für unsere Bitmap--der Quell-DC für AlphaBlend
Ahdc: = CreateCompatibleDC(hdcwnd);
0 (null) des Speichers für die Bitmap-info
ZeroMemory (@bmi, sizeof(BITMAPINFO));
Setup-Bitmap-Informationen
bmi.bmiHeader.biSize: = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth: = Trunc (UlWindowWidth - (UlWindowWidth/5) * 2);
UlBitmapWidth: = Trunc (UlWindowWidth - (UlWindowWidth/5) * 2);
bmi.bmiHeader.biHeight: = Trunc (UlWindowHeight - (UlWindowHeight/5) * 2);
UlBitmapHeight: = Trunc (UlWindowHeight - (UlWindowHeight/5) * 2);
bmi.bmiHeader.biPlanes: = 1;
bmi.bmiHeader.biBitCount: = 32; vier 8-Bit-Komponenten
bmi.bmiHeader.biCompression: = BI_RGB;
bmi.bmiHeader.biSizeImage: = UlBitmapWidth * UlBitmapHeight * 4;
Erstellen Sie unsere DIB-Abschnitt und wählen Sie die Bitmap in der dc
Ahbitmap: = CreateDIBSection (Ahdc, Bmi, DIB_RGB_COLORS, PvBits, 0, 0);
SelectObject (Ahdc, Ahbitmap);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. SourceConstantAlpha: = $7f; die Hälfte der 0xff = 50 % Transparenz
BF. AlphaFormat: = 0; Quelle Alphakanal ignorieren
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
UlBitmapWidth, UlBitmapHeight,
Ahdc, 0, 0, UlBitmapWidth, UlBitmapHeight, bf);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. AlphaFormat: = AC_SRC_ALPHA; Verwenden Sie Quellcode alpha
BF. SourceConstantAlpha: = $ff; opak (Konstante Alpha deaktivieren)
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+ulWindowHeight), UlBitmapWidth, UlBitmapHeight,
Ahdc, 0, 0, UlBitmapWidth, UlBitmapHeight, bf);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. AlphaFormat: = 0;
BF. SourceConstantAlpha: = $3A;
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+2*ulWindowHeight), UlBitmapWidth,
UlBitmapHeight, Ahdc, 0, 0, UlBitmapWidth,
UlBitmapHeight, bf);
Aufräumarbeiten zu tun
DeleteObject(Ahbitmap);
DeleteDC(Ahdc);
Ende;
Alpha-blending eine bitmap
Alpha-blending eine bitmap : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
AlphaBlend Funktion in Delphi
Alpha-blending wird verwendet, um eine alpha-Bitmap anzuzeigen, das ist ein
Bitmap, die transparente oder halbtransparente Pixel hat.
Neben einer roten, grünen und blauen Farbkanal, jedes pixel
in einer alpha-Bitmap hat eine Transparenz-Komponente, die als alpha-Kanal bekannt. Der alpha-Kanal enthält in der Regel so viele Bits als ein Farbkanal. Beispielsweise kann ein 8-Bit alpha-Kanal 256 Stufen der Transparenz von 0 (das gesamte Bitmap ist transparent) bis 255 darstellen, (das gesamte Bitmap ist undurchsichtig). Alpha blending Mechanismen werden aufgerufen, indem AlphaBlend Funktion aufgerufen wird. Die AlphaBlend-Funktion zeigt Bitmaps, die transparenten oder halbtransparenten Pixel haben. Unter Microsoft Windows 95 oder auf Versionen von Microsoft Windows NT vor Microsoft Windows 2000 wird nicht unterstützt.
Das folgende Codebeispiel teilt ein Fenster in drei horizontale Bereiche. Dann zieht es eine Alpha-blending-Bitmap in jedem Bereich, Fenster.
const
AC_SRC_ALPHA = $1;
Prozedur DrawAlphaBlend (hWnd: HWND; Hdcwnd: HDC);
var
Ahdc: HDC; Handle der DC-wir erstellen
BF: BLENDFUNCTION; Struktur für alpha-blending
Ahbitmap: HBITMAP; Bitmap-handle
BMI: BITMAPINFO; Bitmapheader
PvBits: Zeiger; Zeiger auf DIB-Abschnitt
UlWindowWidth,
UlWindowHeight: ULONG; Breite/Höhe des Fensters
UlBitmapWidth,
UlBitmapHeight: ULONG; Bitmap-Breite/Höhe
RT: TRect; verwendet für immer Fenster Abmessungen
beginnen
Fenster-Dimensionen zu erhalten
GetClientRect (hWnd, rt);
Breite/Höhe des Fensters berechnen
UlWindowWidth: = rt.right - rt.left;
UlWindowHeight: = rt.bottom - rt.top;
Stellen Sie sicher, haben wir zumindest einige Fenstergröße
Wenn ((ulWindowWidth = 0) und (UlWindowHeight = 0)) dann
Ausfahrt;
unterteilen Sie das Fenster in 3 horizontale Bereiche
UlWindowHeight: = trunc(ulWindowHeight / 3);
Erstellen Sie einen DC für unsere Bitmap--der Quell-DC für AlphaBlend
Ahdc: = CreateCompatibleDC(hdcwnd);
0 (null) des Speichers für die Bitmap-info
ZeroMemory (@bmi, sizeof(BITMAPINFO));
Setup-Bitmap-Informationen
bmi.bmiHeader.biSize: = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth: = Trunc (UlWindowWidth - (UlWindowWidth/5) * 2);
UlBitmapWidth: = Trunc (UlWindowWidth - (UlWindowWidth/5) * 2);
bmi.bmiHeader.biHeight: = Trunc (UlWindowHeight - (UlWindowHeight/5) * 2);
UlBitmapHeight: = Trunc (UlWindowHeight - (UlWindowHeight/5) * 2);
bmi.bmiHeader.biPlanes: = 1;
bmi.bmiHeader.biBitCount: = 32; vier 8-Bit-Komponenten
bmi.bmiHeader.biCompression: = BI_RGB;
bmi.bmiHeader.biSizeImage: = UlBitmapWidth * UlBitmapHeight * 4;
Erstellen Sie unsere DIB-Abschnitt und wählen Sie die Bitmap in der dc
Ahbitmap: = CreateDIBSection (Ahdc, Bmi, DIB_RGB_COLORS, PvBits, 0, 0);
SelectObject (Ahdc, Ahbitmap);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. SourceConstantAlpha: = $7f; die Hälfte der 0xff = 50 % Transparenz
BF. AlphaFormat: = 0; Quelle Alphakanal ignorieren
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
UlBitmapWidth, UlBitmapHeight,
Ahdc, 0, 0, UlBitmapWidth, UlBitmapHeight, bf);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. AlphaFormat: = AC_SRC_ALPHA; Verwenden Sie Quellcode alpha
BF. SourceConstantAlpha: = $ff; opak (Konstante Alpha deaktivieren)
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+ulWindowHeight), UlBitmapWidth, UlBitmapHeight,
Ahdc, 0, 0, UlBitmapWidth, UlBitmapHeight, bf);
BF. BlendOp: = AC_SRC_OVER;
BF. BlendFlags: = 0;
BF. AlphaFormat: = 0;
BF. SourceConstantAlpha: = $3A;
AlphaBlend (Hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+2*ulWindowHeight), UlBitmapWidth,
UlBitmapHeight, Ahdc, 0, 0, UlBitmapWidth,
UlBitmapHeight, bf);
Aufräumarbeiten zu tun
DeleteObject(Ahbitmap);
DeleteDC(Ahdc);
Ende;
Alpha-blending eine bitmap
By Wiezutun
Alpha-blending eine bitmap : Mehreren tausend Tipps, um Ihr Leben einfacher machen.