Autor Beitrag
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Fr 02.07.04 11:58 
Hallo!

Mit dieser Funktion kann ich einen Screenshot machen
ausblenden 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, 00, iWidth, iHeight, GetWindowDC(h), 00, 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Mo 05.07.04 09:49 
PhilGo. Wie mache ich aus meinem Bitmap ein Jpeg, ohne über eine Auslagerung als Datei zu gehen?
FAlter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: Mo 05.07.04 11:39 
BMP in JPEG: www.delphi-source.de/tipps/grafik/?id=130

BMP Bilinear ändern:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: Mo 05.07.04 13:47 
Man FAlter, ich wurde gefragt nicht du! :evil:
Ach nee, war nur ein Witz. Ich war das Wochenende nämlich anders beschäftigt. Danke für deine Antwort! :wink:
Ä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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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?