AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot mit Transparenz

Ein Thema von Angel4585 · begonnen am 22. Aug 2013 · letzter Beitrag vom 22. Aug 2013
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Screenshot mit Transparenz

  Alt 22. Aug 2013, 11:17
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Screenshot mit Transparenz

  Alt 22. Aug 2013, 11:33
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:47 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