AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

screenshot als jpeg

Ein Thema von ShoAn · begonnen am 27. Apr 2003 · letzter Beitrag vom 12. Aug 2003
Antwort Antwort
Seite 1 von 2  1 2      
ShoAn

Registriert seit: 27. Apr 2003
Ort: wetzlar
7 Beiträge
 
Delphi 6 Personal
 
#1

screenshot als jpeg

  Alt 27. Apr 2003, 18:24
hi, ich möchte gern ein bildschirmfoto machen, aber das gleich als jpeg speichern. das beispiel http://www.delphipraxis.net/viewtopic.php?t=2905 von sakura klappt ganz gut, aber kann ich das nicht gleich mit der TJpegImage - komponente machen?? weil sonst müsste ich das immer umwandeln und das dauert mir zu lang :(
kann mir jemand helfen??
nicht alles, was nass ist, kann fliegen
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2
  Alt 27. Apr 2003, 18:50
Du müsstest es schießen, umwandeln und dann anzeigen bzw. speichren...
Oder habe ich dich falsch verstanden?
Alexander
  Mit Zitat antworten Zitat
ShoAn

Registriert seit: 27. Apr 2003
Ort: wetzlar
7 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 27. Apr 2003, 19:26
naja, das mit dem umwandeln wollt ich ja grad nicht machen, weil das mir zu lange dauert, wenn zum beispiel jede sekunde ein bild speichern möchte.

kann ich denn nicht gleich anstelle der TBitmap komponente, die TJpegImage komponente benutzen???

ich hab dann einfach versucht, das beispiel umzuschreiben. aber ich bleib ja schon an der stelle hängen:
Code:
...
var
  JPEG: TJpegImage;

begin
  JPEG.Width  := Form1.ClientWidth;
  JPEG.Height := Form1.ClientHeight;

...
da kommt die meldung, dass ich die größe einer JPEG-Grafik nicht ändern kann :(
nicht alles, was nass ist, kann fliegen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 27. Apr 2003, 19:48
Moin ShoAn,

da das JPEG Format ja eine (verlustbehaftete) Komprimierung voraussetzt, muss diese ja irgendwann einmal einsetzen.
Eine Möglichkeit, ohne JPEG, wäre es einen Screenshot zu machen, und diesen dann mit Hilfe der ZLIB Kompo (zumindest in D5 Pro enthalten) zu komprimieren. Das geht eigentlich recht schnell.
(mitgestoppt hab' ich nicht, und einen Vergleich mit JPEG Komprimierung kann ich auch nicht anstellen).
Leider ist diese Kompo undokumentiert, allerdings hatten wir zu diesem Thema hier schon einen Thread.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 27. Apr 2003, 20:01
Ich glaube kaum, dass das Umwandeln länger als eine Sekunde dauert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ShoAn

Registriert seit: 27. Apr 2003
Ort: wetzlar
7 Beiträge
 
Delphi 6 Personal
 
#6
  Alt 27. Apr 2003, 21:33
hmm, stimmt. ich hab mal geguckt, wo man den code nacheinander abarbeiten kann. und da sieht man, wo er am längsten brauch. das war nämlich da, wo er den screenshot selbst macht.

ich könnt ja mal sagen, was ich eigentlich vor hab ;)
und zwar, übers netzwerk ein kleines überwachungstool, dass vortlaufend screenshots macht und die dann an einen computer schickt. das ganze soll dann wenns fertig is wie ein film aussehn, aber da ja das screenshot machen so lange dauert, geht das net so gut.
nicht alles, was nass ist, kann fliegen
  Mit Zitat antworten Zitat
RobertS
(Gast)

n/a Beiträge
 
#7
  Alt 28. Apr 2003, 07:22
Also ich habe so etwas in der Art schonmal gemacht,
ich mache alle 12 sek. ein Screenshot speichere den in einen Stream, verkleinere das Bild und speichere es als jpg mit einer anderen Endung auf die Platte.
Das Programm was die Sachen aneinder hängt ändert beim öffnen die Dateiendung und öffnet die jpg Dateien

Aber das dauert nicht lange das speichern und umwandeln, ich gehe mal von einem Rechner aus der nicht lngsamer ist als 800MHz

mfg
Robert
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#8
  Alt 28. Apr 2003, 09:41
Hallo,
ich habe sowas ähnliches auch schon mal benötigt, allerdings weiß ich nicht wie schnell die Wandlungszeit ist...
Delphi-Quellcode:
PROCEDURE aScreenShot(CONST aFileName: STRING);
{*****************************************************************************
*** Screenshot Utility mit Export als JGEP-File                          ***
*** -------------------------------------------                          ***
*** INPUT:  aFileName, speicherziel                                      ***
*** OUTPUT: n/a                                                          ***
*** RESULT: n/a                                                          ***
*[flapp 01/01/2003]**********************************************************}

VAR
  aDC : hDC;
  aBmp : TBitmap; //
  aJpg : TJPEGImage;
  mh, hBmp : THandle;
BEGIN
  ajpg := TJPEGImage.Create;
  aBmp := TBitmap.Create;
  aBmp.Width := Screen.Width;
  aBmp.Height := Screen.Height;
  aDC := GetDC(0);
  hBmp := CreateCompatibleBitmap(aDC, Screen.Width, Screen.Height);
  mh := SelectObject(aDC, hBmp);
  TRY
    BitBlt(aBmp.Canvas.Handle, 0, 0, aBmp.Width, aBmp.Height,
      aDC, 0, 0, SRCCopy);
    ajpg.Assign(aBmp);
    ajpg.CompressionQuality := 30;
    ajpg.Compress;
    ajpg.SaveToFile(aFileName);
  FINALLY
    ajpg.Free;
    aBmp.Free;
    SelectObject(aDC, mh);
    DeleteObject(hBmp);
    ReleaseDC(0, aDC);
  END;
END;
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
ShoAn

Registriert seit: 27. Apr 2003
Ort: wetzlar
7 Beiträge
 
Delphi 6 Personal
 
#9
  Alt 28. Apr 2003, 16:13
@RobertS: hehe, ich habn k6 2 300mhz ;)

also jetzt geht eigentlich alles ganz gut. ich hab noch nebenbei reingemacht, dass man die größe von dem bild verändern kann:

Delphi-Quellcode:
procedure aScreenShot(const aFileName: String; Quality, Width, Height : Integer);
var
  aDC : hDC;
  aBmp : TBitmap;
  aJpg : TJPEGImage;
  mh, hBmp : THandle;

begin
  ajpg := TJPEGImage.Create;
  aBmp := TBitmap.Create;
  aBmp.Width := Screen.DesktopWidth;
  aBmp.Height := Screen.DesktopHeight;
  aDC := GetDC(0);
  hBmp := CreateCompatibleBitmap(aDC, Screen.Width, Screen.Height);
  mh := SelectObject(aDC, hBmp);

  try
    BitBlt(aBmp.Canvas.Handle, 0, 0, aBmp.Width, aBmp.Height, aDC, 0, 0, SRCCopy);

    ajpg.Assign(aBmp);

    aBmp.Width := Width;
    aBmp.Height := Height;
    aBmp.Canvas.StretchDraw(Rect(0, 0, aBmp.Width, aBmp.Height), ajpg);

    ajpg.assign(aBmp);
    ajpg.CompressionQuality := Quality;
    ajpg.Compress();
    ajpg.SaveToFile(aFileName);
  finally
    ajpg.Free;
    aBmp.Free;
    SelectObject(aDC, mh);
    DeleteObject(hBmp);
    ReleaseDC(0, aDC);
  end;
end;
kann mal jemand schnell trübergucken, ob das auch so performance-mäßig ok ist? weil, wenn ich jetzt auf den button klicke, bleibt meine maus sogar für knapp eine sekunde hängen ;) naja, vielleicht liegts auch an meiner alten krück ;)
nicht alles, was nass ist, kann fliegen
  Mit Zitat antworten Zitat
Tim.exe

Registriert seit: 29. Apr 2003
186 Beiträge
 
#10
  Alt 29. Apr 2003, 14:53
@ ShoAn:

Mal ne ganz dumme Frage, wie ist den der ButtonClick dazu, also der Aufruf???
!!! Sigs stinken !!!
  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 23:26 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