3 Stimmen

Direkter Zugriff auf DirectDraw-Oberflächenspeicher in C#

Ich habe eine Videoerfassungskarte, die in regelmäßigen Abständen einen benutzerdefinierten Puffer (eine bestimmte Speicheradresse) mit Bilddaten füllt. Das funktioniert für mich in C++, denn ich kann ihm einfach eine Surface.lpSurface-Zeigeradresse geben und der Capture-Kartentreiber füllt ihn automatisch mit neuen Bilddaten für jedes Bild, woraufhin ich flip() und das neue Bild abrufen kann, was zu einem schönen sauberen Video-Feed führt.

Das Problem ist, dass ich nach C# portieren und ich muss in der Lage sein, die gleiche Sache zu tun, aber die verwaltete Version von DirectDraw.Surface hat keine Methode/Eigenschaft für den Erhalt der Speicheradresse der Oberfläche-Speicherbereich. Alles, was ich brauche, ist diese Adresse, gibt es keine Möglichkeit, es mit C # zu erhalten?

1voto

groundh0g Punkte 398

Wenn Sie sich auf MDX beziehen, ist es eine Weile her, seit ich damit gespielt habe, also kann dies totaler Unsinn sein, aber es sollte eine "Lock"-Methode auf der Oberfläche, die Zugriff auf die Bytes geben würde, aber es könnte ein bisschen langsamer sein, als Sie mit direktem Zugriff auf den zugrunde liegenden Zeiger verwendet werden ...

Vielleicht können Sie Ihr Projekt / Ihre Klasse als "unsicher" kennzeichnen und dann auf die nativen DX-Routinen zugreifen, um den Zeiger über pinvoke? zu erhalten. Dann sollte der unsichere Teil Ihres Codes in der Lage sein, direkt auf die Daten zuzugreifen. Richtig?

Es tut mir leid, wenn diese Antwort nutzloser Unsinn ist. Wie ich schon sagte, ist es eine Weile her, dass ich mit DirectShow / MDX gespielt habe. Vielleicht wird dies einige Google-Futter bieten, oder Funken einige Ideen auf Ihrer Seite.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X