AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Image aus Image schneiden
Thema durchsuchen
Ansicht
Themen-Optionen

Image aus Image schneiden

Ein Thema von Stread · begonnen am 11. Jul 2011 · letzter Beitrag vom 11. Jul 2011
Antwort Antwort
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#1

Image aus Image schneiden

  Alt 11. Jul 2011, 14:41
Hi, ich möchte gerne einen Screenshot nur von einem Fenster machen.
Ich drücke auf den Button lasse die Maustaste gedrückt und lasse sie auf einem anderen Fenster los.
Die Anwendung nimmt den Screenshot vom ganzen Bildschirm und stellt danach das Fenster frei.
Meine Methode funktioniert auch ganz gut, in den beiden Images wird das richtige Bild angezeigt, allerdings kann ich es nur 1x ausführen. Beim 2ten mal gibt es Fehler.
Das gleiche Problem gibt es wenn ich es einmal ausgeführt habe und dann die ganze Anwendung schließen will.
Scheint ein größerer Fehler zu sein?
Fehler: http://s7.directupload.net/file/d/2582/cw6v8mp2_jpg.htm

Delphi-Quellcode:
//Fertigt einen Screenshot vom Desktop an
procedure MakeScreenShot(const ATarget: TBitmap);
var
   DesktopDC: HDC;
begin
   DesktopDC := CreateDC('DISPLAY', nil, nil, nil);
   try
     ATarget.PixelFormat := pfDevice;
     ATarget.Width := Screen.Width;
     ATarget.Height := Screen.Height;

     BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY);
   finally
     DeleteDC(DesktopDC);
   end;
end;

procedure TForm1.Button9MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var p:TWindowPlacement ;
h :HWND;
SourceBitmap : TBitmap;
TargetBitmap : TBitmap;
Cut : TRect;
begin
  h:=WindowFromPoint(Mouse.CursorPos);
   p.Length:=SizeOf(TWindowPlacement);
   GetWindowPlacement(h,@p);

MakeScreenShot(Image1.Picture.Bitmap);
Image1.Repaint;

 SourceBitmap:= TBitmap.Create;
 TargetBitmap:= TBitmap.Create;
 SourceBitmap:=Image1.Picture.Bitmap;

   Cut.Left := p.rcNormalPosition.Left;
   Cut.Top := p.rcNormalPosition.Top;
   Cut.Right := p.rcNormalPosition.Right;
   Cut.Bottom := p.rcNormalPosition.Bottom;

  try
   TargetBitmap.Width := Cut.Right - Cut.Left;
   TargetBitmap.Height := Cut.Bottom - Cut.Top;

   BitBlt(TargetBitmap.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, SourceBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY);
   SourceBitmap.Canvas.Refresh;
   Image2.Picture.Bitmap:=TargetBitmap;
   Image2.Repaint;
   JPEG;
    finally
     SourceBitmap.Free;
     TargetBitmap.Free;
  end;

end;
Soll:http://s1.directupload.net/file/d/2582/e2aoyt2m_jpg.htm
Miniaturansicht angehängter Grafiken
fehler.jpeg  

Geändert von Stread (11. Jul 2011 um 17:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#2

AW: Image aus Image schneiden

  Alt 11. Jul 2011, 14:54
Wieso hängst Du die Bilder nicht an Deinen Beitrag an? Dann bleiben Sie uns auch erhalten. Und zu Deinem Code: ich würde den Screenshot ja in der SourceBitmap und den Ausschnitt dann in TargetBitmap speichern. Anschließend diese beiden Bitmaps den jeweiligen Images zuordnen, das spart wohl auch die ganzen Refresh-Aufrufe.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#3

AW: Image aus Image schneiden

  Alt 11. Jul 2011, 17:29
Ich habe es jetzt so geändert
Delphi-Quellcode:
 SourceBitmap:= TBitmap.Create;
 TargetBitmap:= TBitmap.Create;
 MakeScreenShot(SourceBitmap);
Nun geht es und nimmt das Fenster so auf wie man es sieht. Mit evtl. anderen Fenstern drüber.

Was war den der Fehler? Das refresh von Image1 am Anfang?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#4

AW: Image aus Image schneiden

  Alt 11. Jul 2011, 17:36
Ich vermute, das lag am
Zitat:
MakeScreenShot(Image1.Picture.Bitmap);
Wenn das Image bereits ein Bild enthält, kann das IIRC ins Auge gehen. Den genauen Grund weiß ich nicht mehr, aber so wie jetzt finde ich das eh eleganter
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 20:36 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