全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2051
推到 Plurk!
推到 Facebook!

Direct Show 如何取得單張影像資料?

尚未結案
hcw
一般會員


發表:5
回覆:11
積分:3
註冊:2002-09-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-18 11:26:04 IP:211.78.xxx.xxx 未訂閱
請教各位前輩: 我已可以利用DirectShow做ccd擷取影像動作, 但不知該如何取得單張影像資料?.....Thanks!
PIK
一般會員


發表:11
回覆:16
積分:5
註冊:2003-08-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-18 15:39:43 IP:211.21.xxx.xxx 未訂閱
引言: 我已可以利用DirectShow做ccd擷取影像動作
hcw大大您好: 可否分享您的大作,謝謝
bee0606
一般會員


發表:22
回覆:30
積分:10
註冊:2003-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-18 17:11:52 IP:163.25.xxx.xxx 未訂閱
不之先進可否將程式PO上來.....好讓大家可以學習..有問題大家一起討論...謝謝...
hcw
一般會員


發表:5
回覆:11
積分:3
註冊:2002-09-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-18 18:34:53 IP:211.78.xxx.xxx 未訂閱
以下程式是我從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  pDevEnum =NULL; CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC , IID_ICreateDevEnum, (void ** ) &pDevEnum); CComPtr pClassEnum = NULL; pDevEnum->CreateClassEnumerator (CLSID_VideoInputDeviceCategory, &pClassEnum, 0); if (S_OK == (pClassEnum->Next (1, &pMoniker, &cFetched))) { hr = pMoniker->BindToObject(0,0,IID_IBaseFilter, (void**) &pSrc); } else { Msg(TEXT("Unable to access video capture device!")); return E_FAIL; } pSrcFilter = pSrc; g_pGraph->AddFilter(pSrcFilter, L"Video Capture"); g_pCapture->RenderStream (&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSrcFilter, NULL, NULL); g_pVW->SetWindowPosition(0, 0, 640, 480); g_pVW->put_Owner((OAHWND)hWnd); g_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN); g_pVW->put_Visible(OATRUE); g_pME->SetNotifyWindow((OAHWND)hWnd,WM_APP 1, 1); g_pMC->Run(); } void colse_itf() { g_pGraph->Release(); g_pCapture->Release(); g_pMC->Release(); g_pVW->Release(); g_pME->Release(); ppf->Release(); pSink->Release(); pSrcFilter->Release(); }
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-21 15:56:12 IP:210.68.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-22 09:32:06 IP:211.78.xxx.xxx 未訂閱
引言:
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就不過了,要加入什麼東西嗎..麻煩再教一下
可能要include vc的環境要設定如下: tools-->Options-->Directories include要指向directX sdk目錄下的include子目錄,並將該項移到第一個。 library也要指向directX sdk目錄下的lib子目錄,並將該項移到第一個。 project-->settings-->link 在object/library modules中加入Strmiids.lib strmbasd.lib 這樣試試看吧!
help
一般會員


發表:12
回覆:54
積分:13
註冊:2002-06-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-29 18:44:39 IP:211.72.xxx.xxx 未訂閱
我是用這個函式來取得單幅圖案.
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
系統時間:2024-05-01 4:22:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!