Frage

Ich brauche schnellsten Weg Bitmap-Objekt über das LAN in C # zu übertragen.

Abdul Khaliq

War es hilfreich?

Lösung 2

hier ist ein bug in .NET V2.0 SP1 und .NET 3.5-Version von CopyFromScreen (). Es leckt einen Griff, nach einer Weile Verfügung Griffe ausgehen werden und Weirdo Fehlermeldungen wie diese erhalten. Sie können es nicht in seinem jetzigen Zustand verwenden, lesen Sie in diesen Thread für eine andere Art und Weise durch P / Hervorrufen von Windows-API-Funktionen zu tun.

Auch gibt es eine schöne Lösung gefunden auf diesem Link.

Andere Tipps

Das Wort "beste" ist, im besten Fall, ein subjektiver Begriff: -)

Wenn Sie sich über Geschwindigkeit sprechen, dann hängt es davon ab, wie groß die Bitmap ist. Mit einem LAN mit 100 Mbps läuft, können Sie etwas grob etwa 1 Sekunde für jeden 10 MB-Datei erwarten. Für eine kleine Datei, übertragen nur sie, wie sie ist. Zu einer bestimmten Dateigröße, wird es wert sein, die Datei bis zu zippen, sie zu übertragen und sie am anderen Ende unzipping, einfach weil CPU Grunzen sind schneller als Netzwerk Grunzen.

Aber ich denke, Sie ziemlich große Dateien sprechen würden zu machen, dass zusätzliche Codierung lohnenswert.

Update:

Da Sie über einen Screen-Capture-Rahmen sprechen, lassen Sie uns sagen, dass wir bei 1280x1024, 32bpp sind. Ein Vollbild wird dann nehmen 5M, die in weniger als einer Sekunde (andere Netzwerkverkehr zulässt) auf einem 100-Mbps-LAN übertragen werden sollte. Es ist es nicht wert, meiner Meinung nach, um zu versuchen, und dass mehr zu beschleunigen, da der Aufwand der Kompression die Zeitersparnis überwiegen würde.

Wenn Sie tun werden Video Transfer, das ist eine andere Sache. Dann würden Sie nicht ein ganz neues Bild für jeden Frame senden -. Sie die Deltas trainieren würde und übertragen nur die Informationen, auf die Tatsache stützen, dass der Bildschirm im Allgemeinen nur wenig ändert jeder Rahmen

Es hängt davon ab, was Sie gehen, um die Bilder zu verwenden. Ein One-Shot-Screen-Capture, senden Sie einfach die binäre Information. Alles andere, na ja, müssen Sie uns näher geben.

Für die Videoübertragung, haben wir tatsächlich einige Arbeit auf verschiedene Komprimierungsverfahren erfolgen.

Die einfachste Sie vielleicht zu sehen ist, den Bildschirm in eine (z) 16x16 Matrix zu teilen und nur die geänderten Elemente übertragen.

So zum Beispiel jeder Rahmen eines 256-Bit-Bitmaske bestehen angibt, welche Elemente geändert haben. Dann wird die Bitmaske durch die Elemente gefolgt selbst.

Das Algorithmus bedeutet, dass das kleinste Rahmen Delta 32 Bytes ist (wenn der Bildschirm nicht geändert hat). Die größte ist nur 32 Bytes größer als ein Vollbild-Dump.

Eines der anderen Methoden verwendeten wir war einfach zu speichern die topleft am weitesten und bottom-die meisten Pixelpositionen, die sich geändert hatte und übertragen diese beiden Werte zusammen mit dem gesamten Rechteck, das durch sie begrenzt.

Kein Zweifel, es gibt andere Methoden, die Sie, auch die Wahl der Methode dynamisch auf einer Frame-by-Frame-Basis nutzen könnten Mindest Delta Größe zu gewährleisten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top