Webcam進來的影像如何做翻轉(Flip) |
答題得分者是:bugmans
|
Ruan
一般會員 發表:2 回覆:1 積分:0 註冊:2008-05-19 發送簡訊給我 |
Dears :
目前要將Webcam進來的影像做直垂翻轉(FlipVertical)與水平翻轉(FlipHorizonta), 現階段採用IAMVideoControl來做,利用SetMode方法來設定VideoControlFlags的值。 問題是使用SetMode後沒有反應,不知是那裡有問題,若各位先進有更好的方式請指教, 可將影像做垂直或水平的翻轉(ps:即時的影像非圖片)。 以下是利用C:\DSPACK\Demos\BCB6\Playcap 的demo code 修改, 修改後的片斷程式碼如下: [code cpp] HRESULT hr; FilterGraph->ClearGraph(); FilterGraph->Active = false; Filter->BaseFilter->Moniker = SysDev->GetMoniker(((TMenuItem *)Sender)->Tag); FilterGraph->Active = true; CheckDSError(FilterGraph->QueryInterface(IID_ICaptureGraphBuilder2, &pBuild)); CheckDSError(VideoWindow->QueryInterface(IID_IBaseFilter, &VideoFilter)); CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter)); IAMVideoControl *pAMVidControl=NULL; hr = SourceFilter->QueryInterface(IID_IAMVideoControl,(void **)&pAMVidControl); IPin *pPin = NULL; if (SUCCEEDED(hr)) { hr = pBuild->FindPin( SourceFilter, // Filter. PINDIR_OUTPUT,// Look for an output pin. &PIN_CATEGORY_CAPTURE, // Pin category. NULL, // Media type (don't care). FALSE,// Pin must be unconnected. 0, // Get the 0'th pin. &pPin// Receives a pointer to the pin. ); //typedef enum tagVideoControlFlags { // VideoControlFlag_FlipHorizontal = 0x0001, // VideoControlFlag_FlipVertical = 0x0002, // VideoControlFlag_ExternalTriggerEnable = 0x0004, // VideoControlFlag_Trigger = 0x0008 //} VideoControlFlags; long pMode = 0; hr= pAMVidControl->GetCaps(pPin,&pMode); if (SUCCEEDED(hr)) { if(pMode==1) ShowMessage("FlipHorizontal"); if(pMode==2) ShowMessage("FlipVertical"); if(pMode==3) ShowMessage("ExternalTriggerEnable"); if(pMode==8) ShowMessage("Trigger"); if(pMode==12) ShowMessage("Trigger And ExternalTriggerEnable"); } if (SUCCEEDED(hr)) { hr = pAMVidControl->SetMode(pPin, VideoControlFlag_Trigger | VideoControlFlag_FlipVertical); //hr = pAMVidControl->GetMode(pPin, &pMode); //ShowMessage(pMode); } pPin->Release(); pAMVidControl->Release(); pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, NULL, SourceFilter, NULL, VideoFilter); FilterGraph->Play(); pBuild->Release(); VideoFilter->Release(); SourceFilter->Release(); [/code] |
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
我曾經參考這篇http://www.progdigy.com/forums/viewtopic.php?t=596
利用VMR9NormalizedRect達成上下左右翻轉的功能 範例可以從這裡下載http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=37755 的倒數第三篇(2009-01-02 21:00:29) [code cpp] VMR9NormalizedRect VMRRect[4] = {{1,1,0.5,0.5},{0.5,0,1,0.5},{0,0.5,0.5,1},{0.5,0.5,1,1}}; [/code] 改成{1,0,0,1}就是左右翻轉了 編譯時Include Path要加上C:\DSPACK\src\DirectX9,C:\DSPACK\src\DSPack才不會編譯錯誤 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |