線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4452
推到 Plurk!
推到 Facebook!

[BCB] 關於vfw使用於BCB

尚未結案
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-19 12:32:28 IP:61.221.xxx.xxx 未訂閱
這是一個VC使用vfw撥放avi檔的範例 完整VC code如下,請問如何移植到BCB呢? VC裡的cdc hdc hwnd如何在BCB裡run呢? thanks...    ///////======for Video for Window    #include  "vfw.h"    HWND hWndC=NULL; HWND hWnd=NULL; CDC *pCDC=NULL;    BITMAPINFO bmp; BITMAPINFO *lpbi=NULL;    ////=====for avi ============= char szFile[256]; //////==================== void CAvicapView::OnAvi()  {         // TODO: Add your command handler code here            OPENFILENAME ofn;       // common dialog box structure          HWND hwnd;              // owner window            hwnd=GetSafeHwnd();               // Initialize OPENFILENAME     ZeroMemory(&ofn, sizeof(OPENFILENAME));     ofn.lStructSize = sizeof(OPENFILENAME);     ofn.hwndOwner = hwnd;     ofn.lpstrFile = szFile;     ofn.nMaxFile = sizeof(szFile);     ofn.lpstrFilter = "AVI\0*.AVI\0All\0*.*\0";     ofn.nFilterIndex = 1;     ofn.lpstrFileTitle = NULL;     ofn.nMaxFileTitle = 0;     ofn.lpstrInitialDir = NULL;     ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;        // Display the Open dialog box.      GetOpenFileName(&ofn);        PAVIFILE pfile;         PGETFRAME pgf;      PAVISTREAM  ppavi;      AVISTREAMINFO     avis;      unsigned char *bits ;         CDC *pcdc;      pcdc=GetDC();         int Width,Height;      long frame_no;         bmp.bmiHeader.biSize=sizeof(bmp.bmiHeader);      bmp.bmiHeader.biBitCount =24;      bmp.bmiHeader .biPlanes =1;      bmp.bmiHeader .biCompression =BI_RGB;      bmp.bmiHeader .biWidth =320;      bmp.bmiHeader .biHeight =240;      bmp.bmiHeader .biSizeImage =320*240*3;        lpbi=NULL;           AVIFileInit();      if(AVIFileOpen(&pfile,szFile,OF_READ,NULL)==0)     {                        if (AVIFileGetStream(pfile, &ppavi, streamtypeVIDEO, 0)              != AVIERR_OK)          {}         else         {            freeallrc();               if(AVIStreamInfo(ppavi, &avis, sizeof(avis))==0)            {              if (avis.fccType == streamtypeVIDEO) {              bmp.bmiHeader .biWidth = avis.rcFrame.right-avis.rcFrame.left;              bmp.bmiHeader .biHeight =avis.rcFrame.bottom-avis.rcFrame.top;              bmp.bmiHeader .biSizeImage =bmp.bmiHeader .biWidth*bmp.bmiHeader .biHeight*3;              Width=bmp.bmiHeader.biWidth;              Height=bmp.bmiHeader.biHeight;              lpbi=&bmp;              frame_no=avis.dwLength;                          }              }               pgf=AVIStreamGetFrameOpen(ppavi,0) ;                      UpdateWindow();        for(int i=0;i<frame_no;i ) { if(!lpbi) break; if((bits=(unsigned char *)AVIStreamGetFrame(pgf,i))==NULL) { MessageBox("Read frame error !!","error",MB_OK); } else { StretchDIBits(pcdc->GetSafeHdc(),0,0,Width,Height,0,0,Width,Height,bits sizeof(bmp.bmiHeader),(BITMAPINFO *)&bmp,DIB_RGB_COLORS,SRCCOPY); } } AVIStreamGetFrameClose(pgf); } AVIFileRelease(pfile); } else { MessageBox("Avi file error !!","Error!!",MB_OK); } AVIFileExit(); ReleaseDC(pcdc); }
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-19 12:47:31 IP:140.135.xxx.xxx 未訂閱
cdklokBCB您好:      可以參考下面連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25865
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-19 14:35:28 IP:61.221.xxx.xxx 未訂閱
引言: cdklokBCB您好: 可以參考下面連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25865
此一VC範例純粹抓取一avi檔撥放... 不須camara,請問要如何改才能使BCB也有一樣的功能呢...? 查不到資料說...感激不盡....
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-19 14:47:54 IP:140.135.xxx.xxx 未訂閱
引言: 此一VC範例純粹抓取一avi檔撥放... 不須camara,請問要如何改才能使BCB也有一樣的功能呢...?
cdklokBCB 您好: vfw(video for windows)是為了抓取camera所擷取到的畫面所用的函式庫... 假如只是為了要播放*.avi的話,可用MediaPlayer或Animate元件^_^
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-19 15:14:45 IP:61.221.xxx.xxx 未訂閱
還有上述VC碼... GetOpenFileName(),BCB無法使用?    假如我想讀一個avi檔,然後再Form或image上顯示.. 是這樣做呢???? 改自上述VC碼??如何改??    還有VC的dc要改為這樣ㄇ???? StretchDIBits(Image1->Canvas->Handle,0,0,Width,Height,0,0,Width,Height,bits+sizeof(bmp.bmiHeader),(BITMAPINFO *)&bmp,DIB_RGB_COLORS,SRCCOPY); ???    感激不盡....    我BCB的include檔為 #include  #include #include #include #include #include #include ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OPENFILENAME ofn; // common dialog box structure HWND hwnd; // owner window hwnd=GetSafeHwnd(); // Initialize OPENFILENAME ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "AVI\0*.AVI\0All\0*.*\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box. GetOpenFileName(&ofn);
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-19 15:27:41 IP:61.221.xxx.xxx 未訂閱
引言:
引言: 此一VC範例純粹抓取一avi檔撥放... 不須camara,請問要如何改才能使BCB也有一樣的功能呢...?
cdklokBCB 您好: vfw(video for windows)是為了抓取camera所擷取到的畫面所用的函式庫... 假如只是為了要播放*.avi的話,可用MediaPlayer或Animate元件^_^
~~~~ 因為我想要把從avi抓出來的圖片做效果然後再show出AVI... 比如我想把讀入的avi檔....show出有edge detection的avi畫面... 謝謝....
taishyang
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-19 15:40:06 IP:140.135.xxx.xxx 未訂閱
cdklokBCB您好:  
引言:假如我想讀一個avi檔,然後再Form或image上顯示..
請參考下面的code(我已經測試過)... void __fastcall TForm1::FormCreate(TObject *Sender) { MediaPlayer1->Display=Form1; MediaPlayer1->Open(); MediaPlayer1->FileName="c:\\windoes\\clock.avi"; } 若要在Imageg上則改成MediaPlayer1->Display=Image1->HostDockSite;
cmf
尊榮會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-19 15:41:42 IP:61.218.xxx.xxx 未訂閱
cdklokBCB:    這一個 GetOpenFileName()  是 顯示一個檔案對話盒  讓你選擇檔案 所以你可以改成 bcb 的 檔案對話盒        另外 請修改 你所發表 "[分享]簡單的1-2haar小波程式BCB " 在 主題分類中 選擇 分享 這樣才能 對你 推薦給分       
------
︿︿
taishyang
站務副站長


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-19 15:46:42 IP:140.135.xxx.xxx 未訂閱
cdklokBCB 您好:       
引言:我想把讀入的avi檔....show出有edge detection的avi畫面..
根據我的經驗,您必須要先將*.avi擷取出*.bmp(N張),對每張畫面作邊緣偵測 (利用sobel filter之類的濾波器),再將已經處理好的N張bmp轉成*.avi..
cmf
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-20 10:22:57 IP:61.218.xxx.xxx 未訂閱
如何由 AVI 檔案中將影像frame讀出來 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26175
------
︿︿
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-20 20:19:55 IP:61.221.xxx.xxx 未訂閱
引言: 如何由 AVI 檔案中將影像frame讀出來 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26175
謝謝...我已經改成功了....
系統時間:2024-03-29 21:49:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!