AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Screenshots schnell erstellen???
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshots schnell erstellen???

Ein Thema von romber · begonnen am 12. Sep 2008 · letzter Beitrag vom 15. Sep 2008
Antwort Antwort
Seite 2 von 4     12 34      
Popov
(Gast)

n/a Beiträge
 
#11

Re: Screenshots schnell erstellen???

  Alt 12. Sep 2008, 16:02
Zitat von romber:
Ich suche nach einer Möglichkeit, möglichst schnell Screenshots zu erstellen. Das schnellste Ergebnis mit einem Bitmap-Screenshot lag bei mir bei etwa 600ms. Ich muss es irgendwie < 250ms und sogar schneller hinkriegen. Das Bild soll auch möglichst "leicht" sein, damit ich es später auf noch leichteren Teile aufteilen und übers Netz verschicken kann.
Das Problem kenne ich, aber das Problem liegt bei dir. Den Screenshot selbst kriegst du in paar Millisekunden, aber ich wette mit dir, daß du danach das Bild auch noch speicherst. Stimmts? Also das Screenshot allein geht sehr schnell, aber das Speichern auf die Festplatte kann bis zu 500 Millisekunden dauern (manchmal noch länger). Wenn du dann auch noch konvertierst, dann gehen auch noch paar Millisekunden drauf. Ich weiß es, da ich mal selbst paar kleine Testprogramme geschrieben habe. Das Problem hatte ich auch.

Hier meine vergessene Seite mit 5 Jahre alten Programmen. PopSpy und WebCamRecorder haben dem Bildschirm fotografiert. Das Speichern hat so lange gedauert, daß ich Minimum 1 Sekunde pro Bild eingestellt habe. Es kann aber sein, daß inzwischen die Festplatten schneller sind. Ansonsten versuche es mal mit einer Ramdisk.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#12

Re: Screenshots schnell erstellen???

  Alt 12. Sep 2008, 18:38
Zitat von MarcoWarm:
Zitat von romber:
Einfach für mich, für mehr Wissen.
Na dann: das Korrekte Vorgehen in deinem Fall wäre
  • Basisscreenshot machen und komprimiert übertragen
  • nach n Sekunden (oder Hundertstel) weiteren Screenshot machen und Differenz berechnen.
  • der zweite Screenshot wird zum neuen Basisscreenshot
  • Die Differenzdaten in einem möglichst klein gepacktes Format pressen und übertragen
  • bei der Gegenstelle auspacken und auf den Basisscreenshot malen
  • aller 100 oder 1000 Differenzübertragungen mal wieder einen Basisscreenshot schicken

    bei mir hat das so funktioniert
Danke! Könntest Du vielleicht ein paar Zeilen Code aus deienm Projekt als Beispiel mitschicken, falls es kein Super-Geheim-Projekt ist? Das wäre echt toll.

@Popov
Danke! Ich schaue mir die Programme an.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#13

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 13:44
Ich hänge immer noch an der Erstellung der Screenshots und bin immer noch auf der Suche nach einer Methode, schnell und ressourcenschönend Bildschirm-Screenshots zu erstellen. Hat jemand noch Ideen?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#14

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 13:55
Also ich hab bisher einfach ein DC geholt mit GetDC() und dann mit bitblt in ein Bitmap kopiert ....

Ich weiß nicht ob es noch wersentlich schneller gehen kann, aber du kannst ja mal geschwindigkeitsmessungen machen

So jede Funktion 10000 mal durchlaufen lasen und die zeit messen

Evtl. ist ja die screenshot-Funktion gar nicht der flaschenhals?
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#15

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 14:04
Zitat von jfheins:
Also ich hab bisher einfach ein DC geholt mit GetDC() und dann mit bitblt in ein Bitmap kopiert ....
Könntest Du bitte ein bisschen Beispiel-Code posten? Das wäre echt nett! Danke!
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 14:10
Zitat von jfheins:
Evtl. ist ja die screenshot-Funktion gar nicht der flaschenhals?
Das der Flaschenhals nicht der ScreenShot selbst ist sondern das Speichern steht weiter oben schon.
Zitat von romber:
...
Danke! Könntest Du vielleicht ein paar Zeilen Code aus deienm Projekt als Beispiel mitschicken, falls es kein Super-Geheim-Projekt ist? Das wäre echt toll.
Zitat von romber:
Zitat von jfheins:
Also ich hab bisher einfach ein DC geholt mit GetDC() und dann mit bitblt in ein Bitmap kopiert ....
Könntest Du bitte ein bisschen Beispiel-Code posten? Das wäre echt nett! Danke!
Wenn du nur fragst ob du den Quellcode bekommst, kommst du nicht weiter. Warum willst du ihn ... bist du zu faul es selbst zu versuchen, oder hast du gar keinen Ansatz? Dann solltest du dir vielleicht überlegen was leichteres zu programmieren.
Nicht böse werden, ist ein gut gemeinter Rat aus Erfahrung.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#17

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 14:18
Wo hat romber geschrieben, dass das speichern der flaschenhals ist?

Source sieht ungefähr so aus:
Delphi-Quellcode:
var
HDdc: HDC;
    Bild: TBitmap;
const
CopyWidth = 800;
  CopyHeight = 565;

// Vorbereitungen
HDdc := GetDC(0);

Bild := TBitmap.Create;
  Bild.PixelFormat := pf24bit;
  Bild.SetSize(CopyWidth, CopyHeight);
// Vorbereitungen abgeschlosen

// Kopieren
BitBlt(Bild.Canvas.Handle, 0, 0, CopyWidth, CopyHeight, HDdc, 0, 0, SRCCOPY);

//Nachbereitungen
ReleaseDC(0, HDdc);
Bild.Free;
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#18

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 14:18
Zitat von "freak4fun:
Das der Flaschenhals nicht der ScreenShot selbst ist sondern das Speichern steht weiter oben schon. ...
Ich speichere das generierte Bild gar nicht.
Und ein Beispiel brauche ich nicht, um die Code zu kopieren oder so. Ich habe schon mehrere Screenshot-Funktionen selbst gebastelt, auch mit BitBlt und bin mit dem Ergebnis unzufrieden.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#19

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 14:52
Hallo,

ein kleines Problem ist bei Screenshots Vista. Weil die Graphik über den Desktop Window Manager läuft, funktioniert der DC des Desktops sehr langsam. Microsoft rät davon ab, das zu benutzen (insbesondere auf den Desktop zu zeichnen, ist elend langsam). Allerdings kenne ich keine Alternative.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#20

Re: Screenshots schnell erstellen???

  Alt 13. Sep 2008, 15:03
Die Methode von jfheins ist z. Z. die schnellste Methode, die ich getestet habe, gerade mit Vista. Das Problem ist, dass dise Methode ganauso wie alle die ich getestet habe sehr ressourcenfressend ist. In den Moment, wo das Screenshot erstellt wird, friert das ganze System, auch wenn nur für einen Sekundenbruchteil. Wenn ich z.B. eine Funktion erstelle, wo die Screenshots in einer langen Schleife erstellt werden müssen, dann "zittern" das ganze System. Was könnte man dagegen tun?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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:31 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