Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zwei GIFs vereinen (https://www.delphipraxis.net/73272-zwei-gifs-vereinen.html)

faux 14. Jul 2006 23:50


Zwei GIFs vereinen
 
Hallo!

Ich habe zwei TImages übereinander. Im hinteren ist eine Landkarte zu sehen und im vorderen sind bestimmte Regionen markiert. Bei beiden Bildern handelt es sich um GIF-Bilder. Das vordere Bild transparent (GIF-Transparenz). Ich würde jetzt gerne ein vollständies Bild abspeichern (egal ob BMP oder GIF, GIF wäre aber am besten). Dazu habe ich mittels der Suche von MSDN-Library durchsuchenTransparentBlt erfahren und habs auch gleich ausprobiert, aber irgendwei bekomme ich immer ungültige Grafiken. :?
Delphi-Quellcode:
procedure TMainForm.VollstndigeGrafikspeichern1Click(Sender: TObject);
var
  Dest: TPicture;                        // Hier habe ich mal ein temporäres Image angelegt
begin
  if SaveFull.Execute then
  begin
    Dest := TPicture.Create;
    Dest.Bitmap := Image2.Picture.Bitmap; // Ich VERSUCHE in das Temporäre
                                          // Image das hintere Bild zu laden
    TransparentBlt(
      Dest.Bitmap.Handle,                // Hier muss ich das Destination Handle angeben
      0,                                 // X-Koord
      0,                                 // Y
      320,                               // Width
      240,                               // Height
      Image1.Picture.Bitmap.Handle,      // Und hier das Source Handle
      0,                                 // Wieder X
      0,                                 // und Y
      320,                               // und Width
      240,                               // sowie Height
      clNone                             // Hier sollte die Transparente Farbe stehen, aber wie
                                          // lautet die, wenn ich die GIF-Transparenz benutze?
    );
    Dest.SaveToFile(SaveFull.FileName);
  end;
end;
Wäre nett wenn mir wer helfen könnte.

Grüße
Faux

mkinzler 15. Jul 2006 05:58

Re: Zwei GIFs vereinen
 
Die Hintergrundfarbe, des vorderer Bildes (Regionen).

turboPASCAL 15. Jul 2006 07:43

Re: Zwei GIFs vereinen
 
Delphi-Quellcode:
procedure BmpBlend(Source, Dest, New: TBitmap; const BlendFacktor: Byte = 50);
var
  pat, paf, pan: PByteArray;
  x, y: Integer;
begin
  if Source.PixelFormat <> pf24bit then Source.PixelFormat := pf24bit;
  if Dest.PixelFormat <> pf24bit then Dest.PixelFormat := pf24bit;
  if New.PixelFormat <> pf24bit then New.PixelFormat := pf24bit;

  for y := 0 to Dest.Height - 1 do
  begin
    pat := Dest.ScanLine[y];
    paf := Source.ScanLine[y];
    pan := New.ScanLine[y];
    for x := 0 to (Dest.Width * 3) - 1 do
      pan^[x]:= round(paf^[x] - ((paf^[x] - pat^[x]) / 100 * BlendFacktor));
  end;
end;
Delphi-Quellcode:
procedure TFormX.ButtonXClick...
begin
  BmpBlend(
    Image1.Picture.Bitmap,
    Image2.Picture.Bitmap,
    Image1.Picture.Bitmap,
    20);

  Image1.Invalidate;
end;
Oder so, wenn es dir nur ums Blenden geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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