AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Einen bestimmten Bereich des Bildschirm speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Einen bestimmten Bereich des Bildschirm speichern

Ein Thema von LingNeu · begonnen am 15. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#1

Einen bestimmten Bereich des Bildschirm speichern

  Alt 15. Jan 2007, 23:49
Hallo Delphifreunde,
habe im Forum einen interessanten Code für das Speichern der eigenen Form gefunden. Stammt von Martin K unter dem Artikel

http://www.delphipraxis.net/internal...ght=screenshot

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:
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;
Vielleicht kann mir jemand einen Tipp geben.
Vielen Dank
LingNeu
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 00:55
Guck dir doch mal an, was der letzte Parameter von Hier im Forum suchenCopyRect macht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 00:55
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.
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 08:22
@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
Da krieg ich doch den Vogel

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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 09:23
Hallo,

wenn du tatsächlich nur einen Button (oder ein anderes Control) abfotografieren möchtest, dann kannst du auch so vorgehen:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 11:39
@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
Wenn man denkt, dann denkt man nur, das man denkt!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 11:42
Zitat von LingNeu:
@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.
Na dann ist eben der erste Parameter die Quelle.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 12:12
So könnte es funktionieren:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 13:26
@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
Wenn man denkt, dann denkt man nur, das man denkt!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Einen bestimmten Bereich des Bildschirm speichern

  Alt 16. Jan 2007, 13:44
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:35 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