C# das ist der Schnellste Weg um einen Screenshot?
Ich die Umsetzung einer Funktion, mit take screen shot wiederholt und Ausgang dirty Rechtecke zwischen 2 verschiedenen Aufnahmen dann senden Sie re-ziehen Sie den Bildschirm in einem Fenster.
Kann ich es läuft zwischen 20~30FPS derzeit. Es ist schon akzeptabel. Aber dann machte ich einen Maßstab und Messen Ihre Leistung. Fand heraus, dass die Graphics.CopyFromScreen()
dauert bis zu 50% der Bearbeitungszeit. (Yep. Selbst im ungünstigsten Fall dauert es immer noch länger als all die schmutzige Rechtecke) Dann habe ich die native-API-Implementierung BitBlt()
und bekommen keine Verbesserung.
Ich weiß, es gibt keinen praktischen Gründen, um es schneller als 30FPS in diesem Fall. Ich Frage mich nur, gibt es einen schnelleren Weg, um den Bildschirm fotografieren?
Dank.
- Habt Ihr Euch überlegt, eine schnellere Art und Weise der Erfassung Bildschirm?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist sehr ähnlich zu einer Frage, die vor einigen Jahren: Hier. Die Frage war, ob directx ist die Erfassung Fähigkeiten, die verwendet werden könnte, um bessere Leistung zu erhalten.
War der Konsens, dass es wahrscheinlich würde nicht bieten eine performance-Steigerung, TightVNC hat es sehr schnell durch Betrug. Es verwendet einen Treiber, der nicht über die API zu verwenden, die (vermutlich) .NETTO ist mit.
Ich irgendwann erinnern Sie sich den Quellcode für Camstudio und ich glaube, Sie verwenden directx entfuhrt Fähigkeiten. Ich glaube nicht, dass Sie können push, die viel letzten 30 fps, und die meiste Zeit nicht einmal das. Ich bin mir nicht sicher, ob das ein problem mit den Haken camstudio verwendet, um herauszufinden, Wann sich etwas geändert hat oder den tatsächlichen capture-Mechanismus.
Für diejenigen, die an diesem thread, kam ich auf diese Lösung :
Müssen Sie das Paket SharpDX und SharpDX.Direct3D11
Diesem code erhalten Sie so schnell wie möglich die Bilder vom front-Puffer der Grafikkarte und abrufen byte[] aus dem bitmap erstellt.
Der code scheint nicht stabil zu sein in den Speicher-und Prozessor-Auslastung (GPU und CPU).
Verwendung :
Alternative zu
CopyFromScreen()
überprüfen diese. Beachten Sie, dass dieGraphics.CopyFromScreen()
selbst ruft die APIBitBlt()
kopieren von Bildschirm, Sie können den source-code mit dem Reflektor.