我正在尝试从我的 C# 应用程序中征服 VFW。之前的大部分事情都还很模糊,毕竟我已经到了最后一点才完成。
当我使用一组消息启动相机驱动程序时
- WM_CAP_GET_VIDEOFORMAT
- WM_CAP_SET_VIDEOFORMAT
然后我在 GET_VIDEOFORMAT 上收到指向 BITMAPINFO 结构的指针(我想,因为网络摄像头没有安装其本机驱动程序)结构中的一项名为 biCompression 非常奇怪的值 = 0x32595559 (844715353)。始终是相同的值,并且 RGBQUAD - 全为零。请查看该值为十进制格式的镜头:
当我用视频格式选择调出VFW Dialog时,我可以看到YUY2(可选并且可以设置),以及可以选择的MJPG,但是这导致黑屏作为视频捕获结果。
当我调用 SET_VIDEOFORMAT 并向 VFW 发送没有压缩的标准 BMP RGB 640x480 格式时,它在 SendMessage 上返回 0(零),这意味着它无法设置。并且,同时,将带有在 GET_VIDEOFORMAT 上接收到的奇怪压缩值的结构发送回 SET_VIDEOFORMAT,返回 1,这意味着 VFW 接受了它。
所以我想知道为什么会这样?操作系统(Win7)没有用于通常未压缩的 BMP 的特定编解码器,或者因为网络摄像头没有安装其驱动程序?
另一个问题是:BITMAPINFO 压缩项中的 0x32595559 值是什么意思?
我已经将它视为普通的 24 位 YUV 数据,但生成的图像是黑白的,没有颜色,尽管在视频流传输期间它是彩色的,如果我从剪贴板获取它,它也是彩色的。
如何处理这种碰撞,如果你知道的话,请帮助我。如果您对此非常满意,那么我很乐意$$。
谢谢。
UPD。哇,感谢我将十进制数据转换为十六进制(压缩值)的自发想法,我在 Google 中发现了它的 YUY2 编解码器类型的压缩。全桌在这里
好的,但问题仍然没有答案。如果 PC 不包含未压缩的 RGB 位图的正确编解码器,那么当我发送 SET_VIDEOFORMAT 时,VFW BOX 中实际发生了什么?它是否搜索适当的编解码器并尝试将其附加到现有的视频流图?
我认为这个问题的答案将有助于让每个人都了解 VFW。