Re: DXGI Desktop Duplication API (DX11 Win8+) Hilfe gesucht
Verfasst: 22.06.2018 10:15
Vergiss das. Viel zu langsam.Hoto hat geschrieben:Bisherige Lösungsansätze
1. dem Speicherbereich einen BMP Header voran stellen, so dass das Bild direkt mit CatchImage() geladen und mit ResizeImage() verkleinert werden kann.
Alles, was mit 2DDrawing zu tun hat, kannst du hier vergessen.2. die Bilddaten direkt in den Speicherbereich eines PB Images speichern. Ob das aber besser oder gar schnell ist ohne die Daten erst umordnen zu müssen damit die Subpixel Reihenfolge passt?
3. die Daten direkt auszulesen und per Formeln verkleinern, ist da ein ResizeImage() aber nicht eindeutig schneller?
Am besten resized du das Bild schon im C++-Code mit der entsprechenden DirectX-API. Es ist ja nicht nur so, dass das Bild allein schon 32 MB hat, es wird ja auch noch mindestens 30 mal pro Sekunde aktualisiert. Da fließen also fast 1 GB/s durch die Leitungen. Damit belastest du dein System schon stark genug. Es soll ja schließlich auch noch andere Dinge tun. Und stetig 1GB/s vom Grafikkartenspeicher in den Arbeitsspeicher zu transferieren kann nicht die Lösung sein. Du musst die Grafikkarte die Arbeit des Verkleinerns machen lassen, nicht die CPU. Und ich fürchte dafür musst du an C++ ran.4. mir noch mal die Desktop Duplication API anzuschauen, ob die Daten nicht zuerst im Grafikkartenspeicher landen und es möglich wäre sie dort zu verkleinern. Eine Grafikkarte kann das nun mal am schnellsten.
Ups, ich hätte mal vorher lesen sollen, was du unten schreibst.Aktuell letzte Gedanken dazu
Mit 1. hatte ich bereits angefangen, bevor mir die restlichen Ideen kamen als ich schon im Halbschlaf war, daher muss ich mich in die Punkte noch einlesen. Vor allem 4. klingt für mich nach der eigentlich besten Lösung, allerdings müsste ich mich dann mit C++ erst mal rumschlagen, das ich gerade so halbwegs lesen kann, aber wenn ich schon mal VS C++ 2013 installiert habe... die MIT Lizenz der DXGCap.dll ließe das jedenfalls zu.
Wie würdet ihr es machen? Hab ich noch eine Methode übersehen?