Доступ к памяти поверхности DirectDraw непосредственно в C # - PullRequest
3 голосов
/ 10 февраля 2011

У меня есть карта видеозахвата, которая работает, периодически заполняя указанный пользователем буфер (заданный адрес памяти) данными изображения.Это работает для меня в C ++, потому что я могу просто дать ему адрес указателя Surface.lpSurface и драйвер карты захвата будет автоматически заполнять его новыми данными изображения каждый кадр, после чего я могу перевернуть () и получить новое изображение, в результатехороший чистый видеопоток.

Проблема в том, что я портирую на C # и мне нужно иметь возможность делать то же самое, но в управляемой версии DirectDraw.Surface нет метода / свойства для полученияадрес памяти области памяти поверхности.Все, что мне нужно, это этот адрес, нет ли способа получить его с помощью C #?

1 Ответ

1 голос
/ 15 февраля 2011

Если вы имеете в виду MDX, я уже давно с ним поиграл, так что это может быть полной ерундой, но на Surface должен быть метод "Lock", который бы давал доступ к байтам,но это может быть немного медленнее, чем вы привыкли с прямым доступом к базовому указателю ...

Вы можете пометить ваш проект / класс как "небезопасный", а затем получить доступ к собственным процедурам DXполучить указатель через pinvoke?Тогда небезопасная часть вашего кода должна иметь доступ к данным напрямую.Правильно?

Извините, если этот ответ - бессмысленная чепуха.Как я уже сказал, я давно не играл с DirectShow / MDX.Может быть, это обеспечит Google фуражом или вызовет некоторые идеи на вашей стороне.

...