我有一个视频采集卡,通过定期用图像数据填充用户指定的缓冲区(给定的内存地址)来工作。这在C ++中对我有用,因为我可以给它一个Surface.lpSurface指针地址,并且捕获卡驱动程序将自动用每帧新的图像数据填充它,我可以在其上翻转()并获取新图像,从而导致一个干净的视频。
问题是我正在移植到C#并且我需要能够做同样的事情,但DirectDraw.Surface的托管版本没有用于获取表面存储区域的内存地址的方法/属性。我需要的只是这个地址,有没有办法用C#来获取它?
答案 0 :(得分:1)
如果你指的是MDX,我玩了它已经有一段时间了,所以这可能完全是胡说八道,但Surface上应该有一个“Lock”方法可以访问字节,但它可能比你习惯直接访问底层指针要慢一些......
您可以将项目/类标记为“不安全”,然后访问本机DX例程以通过pinvoke获取指针?然后,代码的不安全部分应该能够直接访问数据。正确?
很抱歉,如果这个回复毫无用处。就像我说的那样,自从我玩DirectShow / MDX以来已经有一段时间了。也许这会提供一些谷歌饲料,或激发你的一些想法。