濮阳杆衣贸易有限公司

主頁 > 知識庫 > 在vs2008+Vista中DirectShow的使用

在vs2008+Vista中DirectShow的使用

熱門標簽:浙江智能外呼電話機器人 成都400電話辦理申請流程 上海高頻外呼系統(tǒng)多少錢一個月 甘肅蘭州400電話申請 尚景外呼系統(tǒng) 軍事地圖標注法 全國門店地圖標注 地圖標注分幅 地圖標注和認領的區(qū)別

最近想用OpenCV庫進行視頻處理,但十分不幸的是新買的筆記本裝的是Vista,對網(wǎng)絡攝像機只能用DirectShow*方式控制,而不能用在XP里還能使用的vfw方式,而大多數(shù)OpenCV的例程都用vfw方式實現(xiàn)的,得自己去轉變成 DirectShow的方式。當然了,DirectShow 也將要被Media Foundationt淘汰了。但分析一下,在XP/ Vista/ Windows7 時代還是會被保留的。

DirectShow在DirectX9.0b之前都包括在這個庫中,在DX9.0c開始,則被獨立成庫,要另外安裝**。(注,在XP(sp2)中默認安裝了DX9.0c而Vista默認安裝了DX10。)后來MS又把DirectShow放入了WindowsSDK中。在vs2008 中的 WinSDK6.0a 已經包含了DirectShow,但在vs2005中的WinSDK則沒有。

由于懶得重裝XP系統(tǒng),所以就直接給本本裝了個vs2008,嘗試使用DirectShow。在http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F 中下載了個例程,解壓,打開工程文件,F(xiàn)5直接編譯,接著~~~~

碰到了經典的 error C2146: syntax error : missing ';' before identifier 'PVOID64' 錯誤。上網(wǎng)查了好久,終于明白就是庫連接有問題,找不到相應的.h文件,解決方法就是裝DX(和DS),和改頭文件連接路徑。看了看,項目的目錄,發(fā)現(xiàn),在Debug目錄下已經有個叫DirectShow的目錄,里面已經包含了相關的頭文件和庫文件了。而vs2008已經把WinSDK安裝好了,就是說DS也已經安裝好了。但是由于原配的DirectShow目錄中的文件是針對DX9的DS,而實際Vista中安裝的是DX10和WinSDK6.0a,所以編譯出錯。
因此,在Project->Settings->Settings for:(All configurations)的C/C++和Link中,把所有的DirectShow/Include,變成 $(FrameworkSDKDir)Include;把所有的DirectShow/Lib,變成 $(FrameworkSDKDir)Lib。
改動的有:
...C/C++->Common->Additional include directories
...Link->Common->Additional library directories

檢查編譯命令,看看是否已經包括新的目錄。

F5,再次編譯。

還是告訴在...\DirectShow\Include\dxtrans.h 頭文件中,不能打開d3d.h。在次看看d3d.h 在啊,但認真看看只是在原配的DirectShow目錄中,而新的WinSDK6.0a沒有,那這么辦???
咦~~~!怎么還是在原來的DirectShow目錄找dxtrans.h,看看文件CameraDS.h:
#include atlbase.h>
#include "DirectShow/Include/qedit.h"
#include "DirectShow/Include/dshow.h"
#include windows.h>
#include cxcore.h>

啊,得把引用 "DirectShow/Include/qedit.h" 改成 qedit.h> ,把引用 "DirectShow/Include/dshow.h" 改成 dshow.h>。 存盤后,編譯,再次出現(xiàn)錯誤:

1>CameraDS.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\qedit.h(498) : fatal error C1083: File (Include) can not open: "dxtrans.h": No such file or directory

一查看,沒在WinSDK的目錄上找到dxtrans.h,上網(wǎng)一查,新的DS不在包含這個文件。上網(wǎng)找到了解決方案。
http://www.cnblogs.com/pcmax/archive/2008/11/22/1338989.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687SiteID=1

現(xiàn)在采用的是第二種方法:

在調用 包含qedit.h 的命令前加入四句:
#define __IDxtCompositor_INTERFACE_DEFINED__ 再修改qedit.h 中引用 dxtrans.h 的部分,要求注釋掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"

再編譯運行,成功??! 選擇設置攝像頭,視頻顯示,點擊q鍵,退出。

參考:

*DirectShow: http://msdn.microsoft.com/en-us/library/ms783323(VS.85).aspx
**DirectX(Feb 2005): http://dev.csdn.net/article/62/62941.shtm

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

#include qedit.h>

標簽:河北 朔州 本溪 中衛(wèi) 永州 上海 陽泉

巨人網(wǎng)絡通訊聲明:本文標題《在vs2008+Vista中DirectShow的使用》,本文關鍵詞  在,vs2008+Vista,中,DirectShow,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在vs2008+Vista中DirectShow的使用》相關的同類信息!
  • 本頁收集關于在vs2008+Vista中DirectShow的使用的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    清新县| 南丰县| 苏尼特右旗| 姚安县| 墨玉县| 静宁县| 长宁县| 汉源县| 徐水县| 仁布县| 通州市| 昌宁县| 榆树市| 类乌齐县| 望城县| 文化| 界首市| 旺苍县| 弥勒县| 佛教| 玉门市| 将乐县| 禹城市| 大姚县| 保山市| 通海县| 武陟县| 望奎县| 二连浩特市| 依安县| 成安县| 南开区| 格尔木市| 武功县| 西峡县| 视频| 黑山县| 濮阳县| 津市市| 南宁市| 玉林市|