Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Screenshot mit Transparenz (https://www.delphipraxis.net/176257-screenshot-mit-transparenz.html)

Angel4585 22. Aug 2013 11:17

Screenshot mit Transparenz
 
Hallo!

Ich nutze diese Methode um einen Screenshot zu machen: http://www.delphipraxis.net/2654-scr...speichern.html

Für meine Zwecke habe ich das ganze etwas abgeändert:
Delphi-Quellcode:
procedure ScreenToFile(X, Y, Width, Height: Integer; AFileName: String);
var
  Bitmap: TBitmap;
  Canvas: TCanvas;
begin
  Canvas := TCanvas.Create;
  try
    Canvas.Handle := GetWindowDC(0);
    try
      Bitmap := TBitmap.Create;
      try
        Bitmap.Width := Width;
        Bitmap.Height := Height;
        Bitmap.PixelFormat := pf32bit;
        (*
          Bitmap.Canvas.CopyRect(Screen.DesktopRect, Canvas, Screen.DesktopRect);

          Anstatt der folgenden Zeile, kann auch die CopyRect Funktion genutzt werden.
          Die CopyRect-Funktion nutzt zusätzlich ein paar Schutzmechanismen, welche für
          ScreenShots nicht notwendig sind. Ausserdem greift die CopyRect-Funktion auf
          StretchBlt-Funktion zurück, welche langsamer als BitBlt ist.
        *)
        BitBlt(Bitmap.Canvas.Handle, 0, 0, Width, Height, Canvas.Handle,
          X, Y, Bitmap.Canvas.CopyMode);
        Bitmap.SaveToFile(AFileName);
      finally
        Bitmap.Free;
      end;
    finally
      ReleaseDC(0, Canvas.Handle);
    end;
  finally
    Canvas.Free;
  end;
end;
Damit habe ich die Möglichkeit einen Screenshot von einem bestimmten Bereich vom Bildschirm zu machen.
Was ich jetzt noch brauche ist, dass von dem gemachten Bild von aussen her alles transparent wird, bis die ersten Linien kommen.
Also im Prinzip ein Transparent-FloodFill auf den Punkt [0,0].

Wie mache ich sowas?

Mit Bitmap.Canvas.FloodFill() kann ich ja ein Floodfill auslösen, aber wenn ich mich recht erinnere, hat TColor(was ich dem FloodFill übergeben muss) keinen Alphakanal.

Habt Ihr Tipps für mich, wie das trotzdem geht?

Ausserdem muss ich dazu das Bild im GIF- oder PNG-Format speichern, geht das?

Medium 22. Aug 2013 11:33

AW: Screenshot mit Transparenz
 
Die Windows GDI kennt keine Transparenz, und somit kennt auch TBitmap keine. Du müsstest auf eine andere Grafik-Engine setzen, z.B. GDI+ oder Graphics32. (Für beide gibt es Zuweisungsmöglichkeiten eines GDI Bitmaps.) Speichern als GIF oder PNG ist natürlich möglich. Ob die vorgenannten da fertige Methoden liefern weiss ich allerdings nicht aus dem Stegreif.


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