AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TImage problem in verbindung mit UpdateLayeredWindow
Thema durchsuchen
Ansicht
Themen-Optionen

TImage problem in verbindung mit UpdateLayeredWindow

Ein Thema von EWeiss · begonnen am 27. Mär 2009
 
EWeiss
(Gast)

n/a Beiträge
 
#1

TImage problem in verbindung mit UpdateLayeredWindow

  Alt 27. Mär 2009, 19:09
Hallo

Ich erstelle ein Bitmap mit folgender Funktion
Delphi-Quellcode:
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;
Mein problem ist nun das ich das Bitmap welches auf der Form mit GDI+ gezeichnet wird in ein TImage konvertieren muss.
Damit ich dieses an
BackImage.Picture.Bitmap.Handle übergeben kann.
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
Angehängte Grafiken
Dateityp: jpg dclock_104.jpg (63,6 KB, 29x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz