screenshot verkleinern klappt nicht

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

screenshot verkleinern klappt nicht

Beitrag von malabarista »

Ich wollte einen screenshot machen.
Die normale Größe (screenshot=Bildschirmgröße) funktioniert.
Aber ich wollte ihn auf die Hälfte verkleinern und das klappt nicht: das Bild ist nur schwarz.

Code: Alles auswählen

  bild:= TPortableNetworkGraphic.Create;
  w:=screen.Width;
  h:=screen.Height;
  wn:=w div 2;
  hn:=h div 2;
  bild.setsize(wn,hn);
  ScreenDC := GetDC(0);
  StretchBlt(bild.Canvas.Handle, 0, 0, wn, hn, ScreenDC, 0, 0, w, h,SrcCopy);
  ReleaseDC(0,ScreenDC);
  bild.SaveToFile('scrshot2.png');
  bild.free;                                   
 

Was ist mein Fehler ?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: screenshot verkleinern klappt nicht

Beitrag von Michl »

Ungetestet: Das Canvas wird On Demand, also auf Anforderung erstellt. Oft klappt der Erstzugriff nicht, da es nicht fertig erstellt wurde.

Probier mal sowas:

Code: Alles auswählen

  bild:= TPortableNetworkGraphic.Create;
  w:=screen.Width;
  h:=screen.Height;
  wn:=w div 2;
  hn:=h div 2;
  bild.setsize(wn,hn);
  bild.Canvas.Clear; // <-- sowas oder Fillrect etc.
  ScreenDC := GetDC(0);
  StretchBlt(bild.Canvas.Handle, 0, 0, wn, hn, ScreenDC, 0, 0, w, h,SrcCopy);
  ReleaseDC(0,ScreenDC);
  bild.SaveToFile('scrshot2.png');
  bild.free;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: screenshot verkleinern klappt nicht

Beitrag von malabarista »

Ja, dann klappt es.
Dankeschön.

Antworten