![]() |
Einen bestimmten Bereich des Bildschirm speichern
Hallo Delphifreunde,
habe im Forum einen interessanten Code für das Speichern der eigenen Form gefunden. Stammt von Martin K unter dem Artikel ![]() Kann man das auch so machen, das nur ein bestimmter, einstellbarer Bereich auf der Form abfotografiert werden kann. Also mit dem angegebenen Code habe ich das nicht geschafft. Sobald ich an den angegebenen Parametern was verändere wird zwar das Bild verschoben, dann erscheint aber an dieser Stelle eine weiße Fläche. Ich hänge diesen Code mal hier rein ...
Delphi-Quellcode:
Vielleicht kann mir jemand einen Tipp geben.
procedure TForm1.Button1Click(Sender: TObject);
var BMP: TBitmap; //Original stammt von Martin K ! begin BMP := TBitmap.Create; try BMP.Width := ClientWidth; BMP.Height := ClientHeight; BMP.Canvas.CopyRect(Rect(0, 0, BMP.Width, BMP.Height), Canvas, Rect(0, 0, ClientWidth, ClientHeight)); BMP.SaveToFile('C:\test.bmp'); finally BMP.Free; end; end; Vielen Dank LingNeu |
Re: Einen bestimmten Bereich des Bildschirm speichern
Guck dir doch mal an, was der letzte Parameter von
![]() |
Re: Einen bestimmten Bereich des Bildschirm speichern
1. Bitmap bei einem kleineren Ausschnitt auch entsprechend kleiner anlegen.
2. Bei der Quellangabe Left und Top des Rechtecks auf die Left und Top des Ausschnittes setzen. 3. Das Zielrechteck auf dem Bitmap natürlich bei Left und Top von 0 belassen und die Zielbreite und Zielhöhe ist die Breite und Höhe des Bitmaps (siehe 1.) Ich denke mit den Tipps sollte man das hinbekommen. |
Re: Einen bestimmten Bereich des Bildschirm speichern
@muetze1, danke für deinen Hinweis.
@luckie laut Beschreibung ist das die Quelle, oder ??? Ich blick da nicht mehr durch, weil lt. Hinweis copyrect(rechteck,canvas,source). Die Quelle müsste aber der erste Parameter sein. Ich habe auf der Form einen Button1, den ich abfotografieren möchte. Irgendwas stimmt nicht. Das Bild wird um 180Grad versetzt abfotografiert - obwohl ich nichts getrunken habe :wall: Da krieg ich doch den Vogel :corky: button1.top := 20 button1.left := 10 button1.width := 75 button1.height := 25
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var BMP: TBitmap; begin BMP := TBitmap.Create; try //BMP.Width := ClientWidth; //BMP.Height := ClientHeight; BMP.Width := 75; BMP.Height := 25; BMP.Canvas.CopyRect(Rect(0, 0, 75, 25), Canvas, Rect(0, 0, 75, 25)); BMP.SaveToFile('C:\test.bmp'); finally BMP.Free; end; end; |
Re: Einen bestimmten Bereich des Bildschirm speichern
Hallo,
wenn du tatsächlich nur einen Button (oder ein anderes Control) abfotografieren möchtest, dann kannst du auch so vorgehen:
Delphi-Quellcode:
Grüße vom marabu
function BitmapFromWinControl(wc: TWinControl): TBitmap;
begin Result := TBitmap.Create; Result.Height := wc.ClientHeight; Result.Width := wc.ClientWidth; wc.PaintTo(Result.Canvas, 0, 0); end; procedure TDemoForm.ButtonClick(Sender: TObject); begin with BitmapFromWinControl(Sender as TButton) do begin SaveToFile((Sender as TComponent).Name + '.bmp'); Free; end; end; |
Re: Einen bestimmten Bereich des Bildschirm speichern
@marabu
danke dir für Deine Hilfe. Der Code von dir funktioniert zwar hervorragend, leider kann ich eben nur den gedrückten Button abfotografieren. Ich wollte aber einen beliebigen Ausschnitt auf der Form haben (linke untere Ecke, Breite, Höhe). Ich bin auch noch am experimentieren. ciao LingNeu |
Re: Einen bestimmten Bereich des Bildschirm speichern
Zitat:
|
Re: Einen bestimmten Bereich des Bildschirm speichern
So könnte es funktionieren:
Delphi-Quellcode:
Freundliche Grüße
function BitmapFromBitmap(bm: TBitmap; r: TRect): TBitmap;
begin Result := TBitmap.Create; Result.Height := Succ(r.Bottom - r.Top); Result.Width := Succ(r.Right - r.Left); with Result.Canvas do CopyRect(ClipRect, bm.Canvas, r); end; procedure TDemoForm.ButtonClick(Sender: TObject); var bm: TBitmap; r: TRect; begin bm := BitmapFromWinControl(self); r := ClientRect; InflateRect(r, - bm.Height div 4, - bm.Width div 4); with BitmapFromBitmap(bm, r) do begin SaveToFile('Demo.bmp'); Free; end; bm.Free; end; |
Re: Einen bestimmten Bereich des Bildschirm speichern
@marabu
danke für Deine Mühe. Der Code funktioniert einwandfrei. Ich bekomme ein Bild in der Grösse 225 x 41 Pixel. Kannst Du mir noch sagen, welche Parameter für diese Grösse zuständig sind. Ich hab schon rumprobiert, finde aber nicht die Einstellung dafür. Meine Form hat die Clientgrösse: 202 x 324 Wenn ich was an den Parametern ändere bekomme ich zwar einen kleineren BS-Inhalt, aber trotzdem ist die BMP von der Fläche grösser. merci vielmals LingNeu |
Re: Einen bestimmten Bereich des Bildschirm speichern
Die beiden Funktionen kannst du nicht meinen. Mein Aufruf-Beispiel erzeugt ein Bitmap vom ClientRect des Formulars und mit InflateRect() lege ich einen Ausschnitt fest, indem ich alle Ränder um ein Viertel des Originalmaßes nach innen drücke. Das ist ein rein theoretisches Beispiel. Du wirst andere Anhaltspunkte haben um das Rechteck für BitmapFromBitmap() zu definieren. Wie du von einem ClientRect von 202 * 324 auf ein Teilbild mit 225 * 41 gekommen bist kann ich nicht nachvollziehen. Kannst du deinen Aufruf zeigen? Evtl. noch eine Bildbeschreibung und eine Beschreibung des Ausschnitts, den du extrahieren möchtest?
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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