2011-02-10 6 views
3

사용자 지정 버퍼 (주어진 메모리 주소)에 이미지 데이터를 주기적으로 채워서 작동하는 비디오 캡처 카드가 있습니다. 그것은 C++에서 저에게 효과적입니다. Surface.lpSurface 포인터 주소를 지정하면 캡쳐 카드 드라이버가 모든 프레임의 새로운 이미지 데이터로 자동으로 채워 지므로 플립()하고 새 이미지를 가져올 수 있습니다. 좋은 깨끗한 비디오 피드.C에서 직접 DirectDraw 표면 메모리에 액세스

문제는 내가 C#으로 포팅했기 때문에 똑같은 일을 할 수 있어야하지만, DirectDraw.Surface의 Managed 버전에는 표면 메모리 영역의 메모리 주소를 얻기위한 메서드/속성이 없다는 것입니다. 필요한 것은이 주소입니다. C#을 사용하여 얻을 수있는 방법이 없습니까?

답변

1

만약 당신이 MDX를 언급했다면, 나는 그걸 가지고 놀았 기 때문에 오랜 시간이 걸렸습니다. 그래서 이것은 완전히 난센스가 될 수 있습니다. 그러나 Surface에 "Lock"메서드가 있어야합니다.이 메서드는 바이트에 대한 액세스를 제공합니다 하지만 기본 포인터에 직접 액세스하는 것보다 조금 느릴 수도 있습니다 ...

프로젝트/클래스를 "안전하지 않은"것으로 표시 한 다음 기본 DX 루틴에 액세스하여 pinvoke를 통해 포인터를 얻으시겠습니까? 그런 다음 코드의 안전하지 않은 부분이 데이터에 직접 액세스 할 수 있어야합니다. 권리?

죄송합니다.이 답장은 쓸데없는 의미입니다. 내가 말했듯이, DirectShow/MDX로 ​​연주한지 꽤 오래되었습니다. 어쩌면 이것은 약간의 구글 사료를 제공하거나 당신 편에서 어떤 아이디어를 촉발시킬 것입니다.

관련 문제