![]() |
TImage problem in verbindung mit UpdateLayeredWindow
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Ich erstelle ein Bitmap mit folgender Funktion
Delphi-Quellcode:
Mein problem ist nun das ich das Bitmap welches auf der Form mit GDI+ gezeichnet wird in ein TImage konvertieren muss.
procedure TClockForm.FormShow(Sender: TObject);
var tempBI : BITMAPINFO; ImgW : Cardinal; ImgH : Cardinal; graphics : Cardinal; curWinStyle: Integer; winSize : TSize; srcPoint : TPoint; hBM1 : HBitmap; DC : HDC; blendfunc : BLENDFUNCTION; P4 : Pointer; hbmReturn : HBitmap; begin DoubleBuffered := True; if GDIReady then begin With tempBI.bmiHeader do begin biSize := SizeOf(tempBI.bmiHeader); biBitCount := 32; biHeight := Height; biWidth := Width; biPlanes := 1; biSizeImage := biWidth * biHeight * (biBitCount div 8); end; DC := CreateCompatibleDC(Canvas.Handle); hBM1 := CreateDIBSection(DC, tempBI, DIB_RGB_COLORS, P4, 0, 0); SelectObject(DC, hBM1); GdipCreateFromHDC(DC, graphics); ImgBack := CreateImageFromFile('wall.png'); GetImageSize(ImgBack, ImgW, ImgH); if ImgBack <> 0 then begin GdipDrawImageRect(graphics, ImgBack, 0, 0, ImgW, ImgH); curWinStyle := GetWindowLong(Handle, GWL_EXSTYLE); SetWindowLong(Handle, GWL_EXSTYLE, curWinStyle Or WS_EX_LAYERED); SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE); srcPoint.x := 0; srcPoint.y := 0; winSize.cx := ImgW; winSize.cy := ImgH; With blendFunc do begin AlphaFormat := AC_SRC_ALPHA; BlendFlags := 0; BlendOp := AC_SRC_OVER; SourceConstantAlpha := 255; // here you can set Alpha end; GdipDisposeImage(ImgBack); GdipDeleteGraphics(graphics); UpdateLayeredWindow(Handle, Canvas.Handle, nil, @winSize, DC, @srcPoint, 0, @blendFunc, ULW_ALPHA); (*hbmReturn := LoadSourceImage('wall.png'); if hbmReturn <> 0 then begin ClockBack := TBitmap.Create; ClockBack.Handle := hbmReturn; CombineImage(BackImage.Picture.Bitmap.Handle, ClockBack.Handle, 0, 0, true); end;*) end; InitHand; end; end; Damit ich dieses an
Delphi-Quellcode:
übergeben kann.
BackImage.Picture.Bitmap.Handle
Ich benötige es deshalb um das Hintergrund Bild mit den Bildern für Zeiger usw.. zu kombinieren. Schalte ich die GDI routine aus und verwende nur den auskommentierten teil dann geht es auch. Das problem was ich aber dann habe ist , ich muss dann ein Timage auf die Form legen nur dann funktioniert UpdateLayeredWindow nicht mehr da die Form kein Bitmap hat. Ich brauche aber ein PNG Image mit Alpha Channel.. Wie kann ich also "ImgBack" zu einen TImage konveriteren ? Am angehängten Bild kann man sehen das es geht die Qualität ist aber sehr besch ... eiden. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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