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

CCD用capOverlay方式的問題..

答題得分者是:cmf
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-14 13:36:36 IP:140.135.xxx.xxx 未訂閱
請問大家: 用VFW擷取CCD影像時,通常影像都是呈現在Form上或是Panel上 有沒有辦法顯示在Image上,且採用capOverlay呢?? 我之前是用Timer元件以 void __fastcall TForm1::Timer1Timer(TObject *Sender) { SendMessage(vcHWND,WM_CAP_EDIT_COPY,0,0L); Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0); } 使影像在Image上呈現,但用了capOverlay卻沒有效果... 謝謝大家
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-14 13:49:15 IP:61.218.xxx.xxx 未訂閱
請問 使用 Preview 可以嗎    
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-14 14:12:12 IP:61.218.xxx.xxx 未訂閱
或者你可使用下列方式    void __fastcall TForm1::Timer1Timer(TObject *Sender) {      HDC dc:=GetDC(h);  // h  為 vcHWND 的 parent, 請自行修改    Image1->Picture->Bitmap->Width=320; Image1->Picture->Bitmap->Height=240; BitBlt(Image1->Picture->Bitmap->Canvas->Handle,0,0,320,240,dc,0,0,SRCCOPY);   ReleaseDC(h,dc);    }     
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-14 14:50:55 IP:140.135.xxx.xxx 未訂閱
謝謝cmf的幫忙: 可是Image畫面變成粉紅色的,沒有反應>< 我之前用Preview是可以work的,但是效果不佳(速度慢) 而我發現用Overlay後速的非常的快(顯示在Form上), 所以希望能將畫面顯示在Image上,接下去的作處理(ex.劃線...) 所以希望您能繼續提供協助 感激不盡^_^ 謝謝大家
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-14 15:04:24 IP:61.218.xxx.xxx 未訂閱
taishyang:  會的,我會繼續提供協助的    如果使用 capOverlay 模示,請參考下列          void __fastcall TForm1::Timer1Timer(TObject *Sender) {  capGrabFrameNoStop(vcHWND);  capeditCopy(vcHWND); Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0); }      發表人 - cmf 於 2003/02/14 15:51:10
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-14 16:24:57 IP:140.135.xxx.xxx 未訂閱
cmf您好: 再次感謝您的協助不過還是沒有成功.... 我把我的程式碼附上,請您看看是哪邊出了問題,麻煩您了 void __fastcall TForm1::Timer1Timer(TObject *Sender) { capGrabFrameNoStop(VideoWnd); capEditCopy(VideoWnd); Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { VideoWnd = capCreateCaptureWindow("VideoWindow",WS_CHILD | WS_VISIBLE,0,0,320,240 ,Form1->Handle,(int)1); CAPDRIVERCAPS *psCaps; if (capDriverConnect (VideoWnd, 0) !=0 ) { psCaps= new CAPDRIVERCAPS; capDriverGetCaps (VideoWnd,psCaps,sizeof(CAPDRIVERCAPS)); capOverlay(VideoWnd,true); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Timer1->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Timer1->Enabled=false; } //---------------------------------------------------------------------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-14 17:05:49 IP:61.218.xxx.xxx 未訂閱
taishyang:    先試試是否可存檔 及 time1 的時間 先 設長一點    void __fastcall TForm1::Timer1Timer(TObject *Sender) {    SendMessage(VHandle,WM_CAP_GRAB_FRAME,0,0); SendMessage(VHandle, WM_CAP_FILE_SAVEDIB, 0, szName);    }         發表人 - cmf 於 2003/02/14 17:07:19
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-14 17:21:17 IP:140.135.xxx.xxx 未訂閱
cmf您好: 不好意思,對於ShowMessage的用法,我我涉獵很淺... 所以出現了Undefined symbol 'VHandle'及 Undefined symbol 'szName' 的錯誤訊息.. 我該如何宣告VHandle,szName呢?? 非常感謝您的指導^_^
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-14 17:25:14 IP:61.218.xxx.xxx 未訂閱
    void __fastcall TForm1::Timer1Timer(TObject *Sender) {   SendMessage(VideoWnd,WM_CAP_GRAB_FRAME,0,0); SendMessage(VideoWnd,WM_CAP_FILE_SAVEDIB, 0,"TEST.BMP");    }        
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-14 22:01:42 IP:140.135.xxx.xxx 未訂閱
謝謝cmf您的指導: 但現在因為SendMessage(VideoWnd,WM_CAP_FILE_SAVEDIB, 0,"TEST.bmp"); 而出現了Cannot convert 'char *' to 'long'與 Type mismatch in parameter 'lParam' (wanted 'long', got 'char *') 的錯誤訊息^^" 另外再請教cmf一個問題,有辦法能不用Timer.. 而讓Image像Form一樣呈現影像呢?? 真是不好意思麻煩您了 順心
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-15 09:11:59 IP:61.218.xxx.xxx 未訂閱
taishyang:     你可使用 macro 或 message 方示 呼叫      VFilename = Now().FormatString("yyyymmddhhnnss")+".bmp";  SendMessage(VideoWnd,WM_CAP_GRAB_FRAME,0,0);  SendMessage(VideoWnd,WM_CAP_FILE_SAVEDIB, 0,(long)VFilename); //.......  capGrabFrame(VideoWnd);  capFileSaveDIB(VideoWnd,VFilename);         至於要使用 Timer 或 其它方式  ,要看你的用途是什麼         
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-16 12:30:32 IP:140.135.xxx.xxx 未訂閱
cmf謝謝您: 將code改成 String VFilename; VFilename = Now().FormatString("yyyymmddhhnnss") ".bmp"; SendMessage(VideoWnd,WM_CAP_GRAB_FRAME,0,0); SendMessage(VideoWnd,WM_CAP_FILE_SAVEDIB, 0,(long)VFilename.c_str()); capGrabFrameNoStop(VideoWnd); capEditCopy(VideoWnd); Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0); 已經可以存檔了(我原本是用Image1->Picture->SaveToFile),但Image畫面仍然沒有Overlay的效果,請您繼續指導囉^_^感激不盡
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-02-17 09:56:29 IP:61.218.xxx.xxx 未訂閱
taishyang:     以上所言,在我的電腦上RUN,是沒問題的  所以我們來作一些驗證     1. 請確認 圖檔內容 是否正確     2. 抓圖 -> 存圖 -> 載入圖 查看 image1 顯視內容是否正確     String VFilename;    VFilename = Now().FormatString("yyyymmddhhnnss")+".bmp";    SendMessage(VideoWnd,WM_CAP_GRAB_FRAME,0,0);    SendMessage(VideoWnd,WM_CAP_FILE_SAVEDIB, 0,(long)VFilename.c_str());    Image1->Picture->LoadFromFile(VFilename);  3.抓圖 ->   將圖存入剪貼簿->  至任意繪圖軟體->貼上 查看內容是否正確    capGrabFrameNoStop(VideoWnd);    capEditCopy(VideoWnd);        
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-02-17 13:27:24 IP:61.218.xxx.xxx 未訂閱
taishyang:    跟你介紹一個人 "Ricky_567" 他是作 SGLathe 車床CAD\CAM軟體、銑床CAD\CAM軟體、 SGTM傳輸模擬、專業CAD\CAM軟體開發、逆向工程研發、 自動3D掃描機、手動3D掃描機    關於 vfw 方面 他粉厲害歐 有空 發張信給他,向他 討教 討教  http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=840
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-02-17 14:35:58 IP:140.135.xxx.xxx 未訂閱
非常感謝cmf熱心指導: 您所描述的code完全都正確無誤,但速度卻提升不起來, 畫面大小320*240以上就會有Delay的現象... 無法像Overlay 一樣,我買的影像擷取卡是UPG301B[登昌]出的 它有Preview和Overlay兩種觀看模式,Overlay的模式畫質好,速度快 所以我想利用擷取卡支援Overlay的功能,將畫面由Image顯示... 謝謝您的協助,我會向Ricky_567 請教的 ^_^
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-02-17 14:46:08 IP:61.218.xxx.xxx 未訂閱
T SIR:    畫面大小320*240以上就會有Delay的現象... 這是一定的 除非自己寫驅動程式 無法像Overlay 一樣,我買的影像擷取卡是UPG301B[登昌]出的 它有Preview和Overlay兩種觀看模式,Overlay的模式畫質好,速度快 所以我想利用擷取卡支援Overlay的功能,將畫面由Image顯示... 現在還不能 將畫面由Image顯示 嗎?
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-02-17 15:30:23 IP:140.135.xxx.xxx 未訂閱
cmf您好: 可是我使用 capOverlay(VideoWnd,true);這一行 就可以使Form上的畫面變的相當的快... 所以我想將畫面放到Image上(已經可行),但速度跟Preview一樣 我之前是用USB介面的攝影機(webCamera),不能用Overlay 現在用影像擷取卡,則可以... 在Imageg上的確能顯示畫面,但速度跟在Form上慢多 謝謝您不厭其煩的指導^_^
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-02-17 15:39:51 IP:61.218.xxx.xxx 未訂閱
T SIR:    "在Imageg上的確能顯示畫面,但速度跟在Form上慢多" 以我的做法是 平常時 在 Panel 顯示 需要做編輯時再將圖貼到 image1 上 edit;
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-02-17 15:58:56 IP:140.135.xxx.xxx 未訂閱
cmf您好: 謝謝您,因為我必須要在畫面上畫框框(框選範圍,將那範圍的影像作處理), 所以必須在Image上,假如在Form上,框框會很快的被下一張畫面給蓋住 所以才有這一連串的討論^_^ 感謝您熱心的幫忙^^
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-02-17 16:07:10 IP:61.218.xxx.xxx 未訂閱
這一篇參考看看   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/avicap_9cxf.asp 我還沒使用過 如果試之後可以的話 麻煩教我..........3Q
------
︿︿
系統時間:2024-04-26 3:20:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!