討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 軟體開發過程中有哪些資安漏洞? 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
請問可以用 IBasicVideo::GetCurrentImage 取得 Webcam 影像?
更改我的閱讀文章字型大小
作者 : hst326(duck)
[ 貼文 44 | 人氣 1 | 評價 30 | 評價/貼文 0.68 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/16 下午 09:27:27
先把我要做的事說一遍:

想要對 Webcam 的影像,做照相功能,

其 Webcam 輸出影像格式為 MJPG,照像儲存格式為 BMP。

網路上查到大致上有兩種方法,:

1. 用 ISampleGrabberCB::BufferCB() 來取得 image buffer

    再對 image buffer 做格式轉換: MJPG => DIB/BMP => 存BMP檔

    其中格式轉換還不清楚怎麼透過 Directshow filter 來達到 ?

    所以想採用 2. 的方法達到

2. 利用 IBasicVideo::GetCurrentImage() 擷取目前送到 VMR 的影像

     想說直接擷取 decode 完的影像,可以不必經過 MJPG => DIB/BMP 的格式轉換,

     就可以直接存成 BMP 檔。

     但是做完才發現,GetCurrentImage 無法對 Live Source (Webcam) 取得 image,

     因為用 GetCurrentImage 前要先 Pause Graph,

     但對 live source 而言,一但 Pause,整個資料流便會停止,

     GetState() 也會回傳 VFW_S_CANT_CUE 指出無法 cue image,

     所以這條路感覺也是失敗...

請有經驗的人,可以指引一下,

感謝!





作者 : pernghy(pernghy) DirectX卓越專家貼文超過500則人氣指數超過30000點
[ 貼文 618 | 人氣 37721 | 評價 2990 | 評價/貼文 4.84 | 送出評價 48 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/16 下午 09:43:31
根據以往的經驗,最後我們是直接寫一個filter放在decoder後面,中間的轉換程式是自己寫的(要根據來源的格式做不同的轉換,不過以你的例子應該是還好),此外,MJPG如果依照我以前處理過的例子,進decoder前的sample是必須要一個完整的畫面,這個media sample,只要把JPEG的header補進去,就是一張完整的JPEG檔案。
作者 : hst326(duck)
[ 貼文 44 | 人氣 1 | 評價 30 | 評價/貼文 0.68 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/17 上午 12:07:58

所以看起來,directshow 裡好像沒有現成的 interface 可以達到我的目的 ...

只好硬著頭皮,在 SampleGrabber 前要先把 MJPG 轉成 DIB/BMP 了

>根據以往的經驗,最後我們是直接寫一個filter放在decoder後面,中間的轉換程式是自己寫的(要根據來源的格式做不同的轉換,不過以你的例子應該是還好),此外,MJPG如果依照我以前處理過的例子,進decoder前的sample是必須要一個完整的畫面,這個media sample,只要把JPEG的header補進去,就是一張完整的JPEG檔案。
>
作者 : leoliu(Lord_SadSea)
[ 貼文 83 | 人氣 6745 | 評價 60 | 評價/貼文 0.72 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/10/11 下午 05:05:19

>先把我要做的事說一遍:
>
>想要對 Webcam 的影像,做照相功能,
>
>其 Webcam 輸出影像格式為 MJPG,照像儲存格式為 BMP。
>
>網路上查到大致上有兩種方法,:
>
>1. 用 ISampleGrabberCB::BufferCB() 來取得 image buffer
>
> 再對 image buffer 做格式轉換: MJPG => DIB/BMP => 存BMP檔
>
> 其中格式轉換還不清楚怎麼透過 Directshow filter 來達到 ?


這個你已經試過了嗎?
可以找SDK 6.1裡面有個GrabBitmaps範例,直接抓到就是BMP,補檔頭就可以存檔,smaple程式已經作到。

我也是剛開始學directshow,不清楚ISampleGrabberCB::BufferCB() 抓下來Image buff有可能非bmp嗎?
不過就算得到的Image是 jpeg,其實要轉bmp不難才是,記得在msdn內就看過可以轉的方式,不需要像我以前還要include library。
應該不需要用filter吧∼
 板主 : 白老鼠(Gary)
 > DirectX - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - DirectX - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
DirectX
1 aming 4010 
2 pernghy 1780 
3 白老鼠(Gary) 1120 
4 Akira 1020 
5 冷眼 980 
6 PLAYER 690 
7 阿西德倫 480 
8 andre 450 
9 小弦 430 
10 藍斯洛 410 
DirectX
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625