![]() |
AlphaBlend Png Hintergrund ist weiß
Meine Funktion
Delphi-Quellcode:
Das Problem ist nun das der Hintergrund der PNG der eigentlich Transparent ist mit AlphaBlend weiß gezeichnet wird.
procedure TSkinEngine.DrawAlphaBlend(DC: HDC; X, Y, ClientWidth, ClientHeight: Integer;
fBlend: Byte); var hTempDC: HDC; bf: BLENDFUNCTION; hBmp: HBITMAP; bmi: BITMAPINFO; pvBits: Pointer; begin hTempDC := CreateCompatibleDC(DC); ZeroMemory(@bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth := ClientWidth; bmi.bmiHeader.biHeight := ClientHeight; bmi.bmiHeader.biPlanes := 1; bmi.bmiHeader.biBitCount := 32; bmi.bmiHeader.biCompression := BI_RGB; bmi.bmiHeader.biSizeImage := ClientWidth * ClientHeight * 4; hBmp := CreateDIBSection(hTempDC, bmi, DIB_RGB_COLORS, pvBits, 0, 0); SelectObject(hTempDC, hBmp); bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.SourceConstantAlpha := fBlend; bf.AlphaFormat := 0; AlphaBlend(DC, X, Y, ClientWidth, ClientHeight, hTempDC, 0, 0, ClientWidth, ClientHeight, bf); DeleteObject(hBmp); DeleteDC(hTempDC); end; Wie bekomme ich den Kram weg damit es wieder transparent ist. gruss |
AW: AlphaBlend Png Hintergrund ist weiß
Delphi-Quellcode:
procedure TSkinEngine.DrawAlphaBlend(DC: HDC; X, Y, ClientWidth, ClientHeight: Integer; fBlend: Byte);
var hTempDC: HDC; bf: BLENDFUNCTION; hBmp: HBITMAP; bmi: BITMAPINFO; pvBits: Pointer; begin hTempDC := CreateCompatibleDC(DC); if hTempDC <> 0 then begin try ZeroMemory(@bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth := ClientWidth; bmi.bmiHeader.biHeight := ClientHeight; bmi.bmiHeader.biPlanes := 1; bmi.bmiHeader.biBitCount := 32; bmi.bmiHeader.biCompression := BI_RGB; bmi.bmiHeader.biSizeImage := ClientWidth * ClientHeight * 4; hBmp := CreateDIBSection(hTempDC, bmi, DIB_RGB_COLORS, pvBits, 0, 0); if hBmp <> 0 then begin try SelectObject(hTempDC, hBmp); bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.SourceConstantAlpha := fBlend; // 0 bedeutet ja AC_SRC_OVER, mal die anderen Werte probieren? // https://msdn.microsoft.com/de-de/library/windows/desktop/dd183393(v=vs.85).aspx bf.AlphaFormat := AC_SRC_ALPHA; // Gibt es möglicherweise einen Fehler? if not AlphaBlend(DC, X, Y, ClientWidth, ClientHeight, hTempDC, 0, 0, ClientWidth, ClientHeight, bf) then begin // Im Fehlerfall den Windows-Fehler als Exception zur Anzeige bringen. RaiseLastOSError; end; finally DeleteObject(hBmp); end; end; finally DeleteDC(hTempDC); end; end; end; |
AW: AlphaBlend Png Hintergrund ist weiß
Zitat:
Das AC_SRC_ALPHA verhindert in dem Fall das Blenden Nein Fehler gibt es keinen. gruss |
AW: AlphaBlend Png Hintergrund ist weiß
hbrBackground = 0
Kein WS_EX Style WS_EX_LAYERED verträgt sich nicht mit Child Fenster Bitmap Png Gdiplus Image EDIT: Hat sich erledigt. grusss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz