Autor |
Beitrag |
lemming
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Fr 02.07.04 11:58
Hallo!
Mit dieser Funktion kann ich einen Screenshot machen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function TWindowsControl.FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean; var Rec: TRect; iWidth, iHeight: Integer; begin with Bmp do try GetWindowRect(h, Rec);
iWidth := Rec.Right - Rec.Left; iHeight := Rec.Bottom - Rec.Top;
Width := iWidth; Height := iHeight;
BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);
Result := True; finally ReleaseDC(h, GetWindowDC(h)); end; end; |
Sie speichert das Fenster mit dem Handle den man angibt in ein BMP. Jetzt macht mir das Ding hier aber, je anch Auflösung vom Desktop bis zu 2MB große Bitmaps. Kann ich die irgendwie runter skalieren? Und sei's nur mit der Farbtiefe.
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 02.07.04 12:05
TBitmap hat die Eigenschaft Pixelformat. Z.B. wird mitmeinbitmap.pixelformat := pf8bit; ein 256 Farben Bitmap erzeugt. Das bringt in der Regel schon einiges an Speicherplatz.
Alternativ kann man den Screenshot ja auch als JPG abspeichern.
_________________ We are, we were and will not be.
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: Fr 02.07.04 12:24
Bei 8 Bit, vorausgesetzt du hast True Color eingestellt, könnte das Ergebnis mehr als schlecht sein. Was aber einigermassen gute Ergebnisse liefert ist ein SW, bzw graues Bild. Bei SW wird der krasse Kontrast abgemildert. Alternativ kannst du aber auch pf16bit nehmen. Die liefern unter Umständen annehmbare Ergebnisse bei True Color.
_________________ Gruß
Martin
|
|
FAlter
      
Beiträge: 192
Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
|
Verfasst: Fr 02.07.04 12:26
Bilinear verkleinern (bis halbe größe siehts gut aus, weil bis dahin jedes Pixel "beachtet" wird) und PixelFormat auf pf15bit (Erfahrung, nur geringer Qualitätsverlust). Diese BMPs mit 15Bit werden von Win XP fälschlicherweise als 32 Bit deklariert, ansonsten gabs bei mir noch keine Probleme. pf16bit macht bei mir immer blaue Bilder, warum auch immer.
|
|
PhilGo
      
Beiträge: 315
Win 98, Win Longhorn ;-)
|
Verfasst: Sa 03.07.04 16:54
In meinem Programm, was auch Screen-Shots macht, da speichere ich die Bilder in JPEG-Dateien und ich finde das is eine gute Wahl(Größe nicht mehr als 200 KB beim Screen-Shot vom ganzen Desktop mit super Qualität)
Gruß PhilGo
_________________ Sie werden dich finden und töten... Söhne der großen Bärin!
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 09:38
Hallo FAlter. Leider geht bei mir die Bilinear Funktion nicht. Das Ziel-Bitmap bleibt leer. Mache ich etwas falsch?
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 09:49
PhilGo. Wie mache ich aus meinem Bitmap ein Jpeg, ohne über eine Auslagerung als Datei zu gehen?
|
|
FAlter
      
Beiträge: 192
Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
|
Verfasst: Mo 05.07.04 11:39
BMP in JPEG: www.delphi-source.de/tipps/grafik/?id=130
BMP Bilinear ändern: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure NewSize(const BMP: TBitmap; const Width, Height: Integer); var Neu: TBitmap; AltPXF: TPixelFormat; begin Neu := TBitmap.Create; try Neu.Width := Width; Neu.Height := Height; Neu.PixelFormat := pf24bit;
AltPXF := BMP.PixelFormat; BMP.PixelFormat := pf24bit;
ResampleBilinear(BMP, Neu); BMP.Assign(Neu); BMP.PixelFormat := AltPXF; finally Neu.Free; end; end; |
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 12:41
Ok, ich habe es nun mit Bilinear Resizing, 8Bit und Jpeg, von 2MB auf ganze 52KB geschafft.
Danke!
|
|
FAlter
      
Beiträge: 192
Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
|
Verfasst: Mo 05.07.04 12:47
lemming hat folgendes geschrieben: | 8Bit und Jpeg |
Hoffe, du meinse Graustufen-JPEG, denn wenn du JPEG nimmst, solltest du TBitmap.PixelFormat nicht auf < 24 Bit verringern, da das nur Qualitätsverlust bringt. JPEG verringert die Dateigröße anders.
|
|
PhilGo
      
Beiträge: 315
Win 98, Win Longhorn ;-)
|
Verfasst: Mo 05.07.04 13:47
Man FAlter, ich wurde gefragt nicht du!
Ach nee, war nur ein Witz. Ich war das Wochenende nämlich anders beschäftigt. Danke für deine Antwort!
Ähm, lemming haste jetzt alle nötigen Antworten?
Gruß PhilGo
_________________ Sie werden dich finden und töten... Söhne der großen Bärin!
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 13:58
FAlter hat folgendes geschrieben: | lemming hat folgendes geschrieben: | 8Bit und Jpeg |
Hoffe, du meinse Graustufen-JPEG, denn wenn du JPEG nimmst, solltest du TBitmap.PixelFormat nicht auf < 24 Bit verringern, da das nur Qualitätsverlust bringt. JPEG verringert die Dateigröße anders. |
Oh, habs gemerkt. Jetzt siehts mit gleicher Geschwindigkeit, besser aus.
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 14:00
PhilGo hat folgendes geschrieben: |
Ähm, lemming haste jetzt alle nötigen Antworten?
|
Jetzt läuft's annehmbar. Alle Fragen geklärt.
|
|
lemming 
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 05.07.04 14:18
Moment, zu früh gefreut. Bei der BilinearResize funktion bekomme ich nun manchmal bei einigen Bildern ein Zitat: | EInvalidGraphicOperation > "Scan line index out of range" |
Was hat das zu bedeuten?
|
|