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

請問要怎麼讀進avi檔然後處理我所要的frame呢

尚未結案
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-04 19:19:38 IP:220.133.xxx.xxx 未訂閱
請問各位大大要如何將一個avi檔讀進來~然後選取我所想到的frame 對它做處理呢~例如這個avi是一秒30個frame~但是我只想要抓它每一秒的第一個frame來做處理呢~請各位大大能教教我~謝謝各位大大
gac
初階會員


發表:2
回覆:28
積分:26
註冊:2004-08-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-04 20:50:16 IP:220.130.xxx.xxx 未訂閱
有關 AVI 的所有 API 指令 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_avifile_reference.asp 讀檔的話大概會用到下面幾個指令... AVIFileInit(), AVIFileOpen(), AVIFileGetStream(), AVIStreamInfo(), AVIStreamReadFormat(), AVIStreamRelease(), AVIFileRelease(), AVIFileExit() 一段時間沒用,有點忘了..... 自己先K一下,不懂的話再上來問吧!! 加油!~~~ ---------------------- 我..........還很嫩!
------
我..........還很嫩!
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-10 20:53:51 IP:218.175.xxx.xxx 未訂閱
因為以前都沒碰過這方面的東西~所以自己看實在是有點看不懂的說~ 請問各位大大是不是有小範例之類的可以參考研讀~不然實在是不知如果下手的說~拜託各位大大幫忙~謝謝ㄛ~
koopa
一般會員


發表:5
回覆:9
積分:2
註冊:2004-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-10 21:11:02 IP:220.139.xxx.xxx 未訂閱
對於抓frame我都強烈建議DSPack,因為簡單又方便。vfw也不錯,端看個人喜好,我個人相當喜好用DSpack。 不妨以關鍵字搜尋DSPack。 如果您要的是,每一秒抓一張frame。可把DStrackerBar在interval的地方設定,並且利用SampleGrbber來抓圖。
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-12 20:11:21 IP:220.133.xxx.xxx 未訂閱
請問是否有比較簡單的小範例可以讓我閱讀呢~這樣比較能快一點弄清楚~ 因為現在還是聽的有點模糊~拜託各位大大幫幫我~謝謝各位大大
dragonhippopdc
一般會員


發表:45
回覆:51
積分:19
註冊:2005-01-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-13 11:29:34 IP:218.175.xxx.xxx 未訂閱
我參考了一些人的作品後~我寫成這樣~可是都compiler不會過~所以想請問各位大大問題出在那裡呢
 
#include "vfw.h"        // for video
bool Frame2TImage(PAVISTREAM *gapavi,AVISTREAMINFO *avis,long miniSecond,TImage *Image1);    bool GetVideoStream(char *szFile,PAVISTREAM *gapavi,AVISTREAMINFO *avis);    void __fastcall TForm1::Button3Click(TObject *Sender)
{
    PAVISTREAM gapavi;
    AVISTREAMINFO avis;
    GetVideoStream("c:\\Capture.avi",&gapavi,&avis);
    Frame2TImage(&gapavi,&avis,5000,Image1);
}
//-------------------------------------------------------------------
bool GetVideoStream(char *szFile,PAVISTREAM *gapavi,AVISTREAMINFO *avis)
{
        AVIFileInit();   
        HRESULT hr;
         PAVIFILE pfile;
         hr = AVIFileOpen(&pfile,szFile , 0, 0L);
       if (hr != 0)
       {
            return false;
        }           int gcpavi;
       AVIFileGetStream(pfile, gapavi, 0L, 0); 
       AVICOMPRESSOPTIONS  gaAVIOptions;
       LPAVICOMPRESSOPTIONS  galpAVIOptions;
       AVIStreamInfo(*gapavi, avis, sizeof(*avis));
       galpAVIOptions = &gaAVIOptions;
      _fmemset(galpAVIOptions, 0, sizeof(AVICOMPRESSOPTIONS));
      galpAVIOptions->fccType = avis->fccType;
      switch(avis->fccType) {
                                case streamtypeVIDEO:         galpAVIOptions->dwFlags = AVICOMPRESSF_VALID | AVICOMPRESSF_KEYFRAMES | AVICOMPRESSF_DATARATE;                         galpAVIOptions->fccHandler = 0;
           galpAVIOptions->dwQuality = (DWORD)ICQUALITY_DEFAULT;
           galpAVIOptions->dwKeyFrameEvery = (DWORD)-1; 
         galpAVIOptions->dwBytesPerSecond = 0;
         galpAVIOptions->dwInterleaveEvery = 1;                 
                                break;
                                default:
                                break;
                        }
            return true;
}
bool Frame2TImage (PAVISTREAM *gapavi,AVISTREAMINFO *avis,long miniSecond,TImage *Image1)
{
    PGETFRAME            gapgf; 
    if (avis->fccType == streamtypeVIDEO) {
    gapgf = AVIStreamGetFrameOpen(*gapavi, NULL);
    if (gapgf == NULL)
     return false;
    }
    LONG lFrame;
    lFrame = AVIStreamTimeToSample(*gapavi, miniSecond);
     BYTE                    abFormat[1024];
     LPBITMAPINFOHEADER lpbi;            
     lpbi = (LPBITMAPINFOHEADER)abFormat; 
     lpbi =  (LPBITMAPINFOHEADER)AVIStreamGetFrame(gapgf,lFrame );   
    HBITMAP hBitmap;
hBitmap=CreateDIBitmap( GetDC(NULL),lpbi,CBM_INIT,(BYTE *)lpbi 40,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
 HBITMAP2TImage(hBitmap,Image1);
   return true;
}
它都會指這一行錯誤HBITMAP2TImage(hBitmap,Image1); [C Error] Unit1.cpp(99): E2268 Call to undefined function 'HBITMAP2TImage' 上面這句是錯誤訊息~拜託各位大大幫幫我ㄛ~謝謝
koopa
一般會員


發表:5
回覆:9
積分:2
註冊:2004-05-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-14 02:15:29 IP:220.139.xxx.xxx 未訂閱
引言: 請問是否有比較簡單的小範例可以讓我閱讀呢~這樣比較能快一點弄清楚~ 因為現在還是聽的有點模糊~拜託各位大大幫幫我~謝謝各位大大
您貼的程式碼是vfw的,vfw我個人不太熟。 DSpack如果你灌好,會有相關的程式在裡面,有程式碼。
系統時間:2024-05-13 11:47:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!