Direct Show 如何取得單張影像資料? |
尚未結案
|
hcw
一般會員 發表:5 回覆:11 積分:3 註冊:2002-09-18 發送簡訊給我 |
|
PIK
一般會員 發表:11 回覆:16 積分:5 註冊:2003-08-07 發送簡訊給我 |
|
bee0606
一般會員 發表:22 回覆:30 積分:10 註冊:2003-08-12 發送簡訊給我 |
|
hcw
一般會員 發表:5 回覆:11 積分:3 註冊:2002-09-18 發送簡訊給我 |
以下程式是我從direct X 8 的範例抄下來的,所以DirectShow的原理我也不清楚、不過我試過可以Run。 請教各位前輩可以教我如何取得單張影像資料??....thanks! IVideoWindow * g_pVW = NULL;
IMediaControl * g_pMC = NULL;
IMediaEventEx * g_pME = NULL;
IGraphBuilder * g_pGraph = NULL;
ICaptureGraphBuilder2 * g_pCapture = NULL;
IBaseFilter *pSrcFilter=NULL;
IBaseFilter * pSrc = NULL; HRESULT init(HWND hWnd)
{
CoInitialize(NULL);
CoCreateInstance (CLSID_FilterGraph, NULL,CLSCTX_INPROC,
IID_IGraphBuilder, (void **) &g_pGraph);
CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL,
CLSCTX_INPROC ,IID_ICaptureGraphBuilder2,
(void **) &g_pCapture);
g_pGraph->QueryInterface(IID_IMediaControl,(LPVOID *) &g_pMC);
g_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &g_pVW);
g_pGraph->QueryInterface(IID_IMediaEvent, (LPVOID *) &g_pME);
g_pCapture->SetFiltergraph(g_pGraph); CComPtr
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
IVideoWindow * g_pVW = NULL; IMediaControl * g_pMC = NULL; IMediaEventEx * g_pME = NULL; IGraphBuilder * g_pGraph = NULL; ICaptureGraphBuilder2 * g_pCapture = NULL; IBaseFilter *pSrcFilter=NULL; IBaseFilter * pSrc = NULL;-- 我在這幾行compiler就不過了,要加入什麼東西嗎..麻煩再教一下 |
hcw
一般會員 發表:5 回覆:11 積分:3 註冊:2002-09-18 發送簡訊給我 |
引言:可能要includeIVideoWindow * g_pVW = NULL; IMediaControl * g_pMC = NULL; IMediaEventEx * g_pME = NULL; IGraphBuilder * g_pGraph = NULL; ICaptureGraphBuilder2 * g_pCapture = NULL; IBaseFilter *pSrcFilter=NULL; IBaseFilter * pSrc = NULL;-- 我在這幾行compiler就不過了,要加入什麼東西嗎..麻煩再教一下 |
help
一般會員 發表:12 回覆:54 積分:13 註冊:2002-06-14 發送簡訊給我 |
我是用這個函式來取得單幅圖案.
procedure TformHunter.getSnapShot; var mt : TAMMEDIATYPE ; mt2 : TAMMEDIATYPE ; hdc: Hwnd; iBitDepth: integer; pSrc: IBaseFilter ; GrabIn, GrabOut, pOut:IPin; pins: IEnumPins; cbBuffer : longint; pBuffer: array of char; pVih : TVIDEOINFOHEADER; snapshot: tbitmap; buffer : PByteArray; size: integer; bv: IBasicVideo; lWidth, lHeight: longint; pDIB: ^timage; evCode: integer; bitmapinfo: tbitmapinfo; xbitmap: hbitmap; mybitmap: tbitmap; wd, hd: integer; begin hr := pGrabber.SetBufferSamples(TRUE); // hr:= pEvent.WaitForCompletion(INFINITE, evCode); hr := pGrabber.SetOneShot(TRUE); // hr:= pEvent.WaitForCompletion(INFINITE, evCode); ZeroMemory(@mt, sizeof(TAM_MEDIA_TYPE)); hr := pGrabber.GetConnectedMediaType(mt); // Get a pointer to the video header. pVih := TVIDEOINFOHEADER(Mt.pbFormat^); // if (pVih = NiL) then showmessage('E_FAIL'); // The video header contains the bitmap information. // Copy it into a BITMAPINFO structure. ZeroMemory(@BitmapInfo, sizeof(TBitmapInfo)); CopyMemory(@BitmapInfo.bmiHeader, @(pVih.bmiHeader), sizeof(TBITMAPINFOHEADER)); xBitmap := CreateDIBSection(0, BitmapInfo, DIB_RGB_COLORS,pointer( buffer) ,Thandle(nil), 0); GdiFlush(); size:=0; hr := pGrabber.GetCurrentBuffer(size,nil); // hr:= pEvent.WaitForCompletion(INFINITE, evCode); hr := pGrabber.GetCurrentBuffer(size,buffer); if (hr=E_invalidarg) then showmessage('invalidarg'); if (hr=E_pointer) then showmessage('E_pointer'); if (hr=E_OUTOFMEMORY) then showmessage('Out of memory.'); if (hr=VFW_E_WRONG_STATE) then showmessage('No Sample yet.'); // hr:= pEvent.WaitForCompletion(INFINITE, evCode); // Copy the image into the buffer. mybitmap:=tbitmap.create; wd:=640; hd:=480; mybitmap.height:=hd; mybitmap.width:=wd; mybitmap.pixelformat:=pf24bit; image_snapshot.picture.bitmap.pixelformat:=pf24bit; // StretchDIBits(image_snapshot.canvas.handle, 0, 0, wd, hd, // 0, 0, wd, hd, buffer, bitmapinfo, 0, SRCCOPY) ; // setDiBBits( StretchDIBits(image_snapshot.picture.bitmap.canvas.handle, 0, 0, wd, hd, 0, 0, wd, hd, buffer, bitmapinfo, 0, SRCCOPY) ; // image_snapshot.Canvas.CopyRect(Rect(0,0,640,480), mybitmap.Canvas,rect(0,0,640,479)); mybitmap.free; end; //getSnapShot;gogowin 發表人 - taishyang 於 2003/10/29 20:49:13
------
gogowin |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |