青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

VC++ 6.0下自制媒體播放器&實現(xiàn)AVI文件的圖像截取

VC++ 6.0下自制媒體播放

  可視動畫控件ActiveMovie是Microsoft公司開發(fā)的ActiveX控件,從開始的1.0版、1.2版到現(xiàn)在的2.0版,功能上已經(jīng)有了很大的改進(jìn)。由于該控件內(nèi)嵌了Microsoft MPEG音頻解碼器和Microsoft MPEG視頻解碼器,所以能夠很好地支持音頻文件和視頻文件,用其播放的VCD效果就很好。

  另外,播放時若用鼠標(biāo)右鍵單擊畫面,可以直接對畫面的播放、暫停、停止等進(jìn)行控制,讀者還可以自行在“屬性”欄中對影片播放進(jìn)行控制設(shè)置,用起來非常方便。

  在Microsoft公司去年推出的VC++6.0中已經(jīng)包含了ActiveMovie控件的2.0版,筆者 在VC++6.0下利用這個控件自制了一個簡易的媒體播放器,除了滿屏功能外,還可以對音量進(jìn)行控制。下面把具體做法介紹給讀者。

  一 建立工程 

  利用 VC++6.0的AppWizard生成一個基于對話框的工程Player,去掉對話框上的確定和取消按鈕,并加入ActiveMovie控件(通常情況下ActiveMovie控件并不出現(xiàn)在控件面板中,可在菜單中依次選擇“project—Add To Project— >Components And Controls”,在出現(xiàn)的“Components And Controls Gallery”對話框中打開“Registered Active Controls”文件夾,選中“ActiveMovie Control Object”選項,按“Insert”后關(guān)閉該對話框,ActiveMovie控件便出現(xiàn)在控件面板中),調(diào)整好控件在對話框中的位置。為了能夠控制控件的操作,應(yīng)為對話框設(shè)計一個菜單,菜單的項目可以定為文件、屏幕控制和音量控制。

  二 添加代碼 

  首先利用ClassWizard為ActiveMovie控件聲明一個變量m_ActiveMovie。然后為菜單文件添加兩個菜單項打開文件和退出,并分別添加函數(shù)OnOpen()和OnExit(),代碼如下:
void Cplayer::OnOpen()

{ // TODO: Add your command handler code here char szFilter[] =

" Video File (*.dat)∣ *.dat∣Wave File (*.wav)∣*.wav∣AVI File (*.avi)∣ (*.avi)∣Movie File 

(*.mov)∣(*.mov)∣ Media File (*.mmm)∣(*.mmm)∣Mid File(*.mid;*.rmi)∣ (*.mid;*.rmi)∣MPEG File

(*.mpeg)∣(*.mpeg)∣ All File (*.*)∣*.* ";

//用于設(shè)置FileDialog的文件類型

CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter ); 

if( FileDlg.DoModal() == IDOK ) { CString PathName = FileDlg.GetPathName(); 

PathName.MakeUpper();

        m_ActiveMovie.SetFileName(PathName);

   }

}  

  OnOpen()函數(shù)的作用是顯示“打開”對話框,通過該對話框選擇要執(zhí)行的文件。 
 
利用Visual C++實現(xiàn)AVI文件的圖像截取 
 
劉 濤  yesky

 

  AVI文件就是我們所說的多媒體文件,所謂的AVI圖像就是視頻圖像,該文件是一個RIFF說明文件,它用于獲取、編輯、演示音頻、視頻序列。一般的AVI文件包含音頻流和視頻流,有的特殊的AVI還包含一個控制路徑或MIDI路徑作為附加的數(shù)據(jù)流。

  現(xiàn)在播放AVI文件的軟件很多,但大多無法從AVI視頻文件中讀取一幀圖像并生成BMP格式的文件。筆者在使用AVI文件開發(fā)項目過程中對AVI文件的操作積累了一些經(jīng)驗,對于如何實現(xiàn)從AVI視頻流中獲取任意幀的圖像數(shù)據(jù)并存儲成BMP文件,其中最關(guān)鍵的是要從AVI文件中獲取具體某一幀的圖像數(shù)據(jù),為此我利用Windows提供的API函數(shù)實現(xiàn)了自定義的CAvi類,用于操作AVI文件。

  在使用API函數(shù)操作AVI文件時,一定要注意用AVIFileInit()來初始化AVI庫,程序結(jié)束時用AVIFileExit()釋放AVI庫,否則API函數(shù)無法使用。現(xiàn)以操作包含真彩色圖像的AVI文件為例,給出Cavi類的部分函數(shù)的具體實現(xiàn),其中CaviCreate()函數(shù)用于讀取AVI文件信息并初始化Cavi類的成員,例如根據(jù)AVI文件信息定義每幀圖像的寬、高、每幀圖像的信息頭結(jié)構(gòu)等等;函數(shù)AviRead(int mFrame)用于從AVI文件中讀取第mFrame幀。實現(xiàn)代碼顯示如下:

//Cavi類頭文件定義;
class CAvi file://AVI類,處理AVI文件
{
 public:
 int cy;//圖象高
 int cx;//圖象寬
 file://long m_maxFrame;
 BYTE *pData;//寸儲圖象數(shù)據(jù)
 BITMAPINFO *m_pBMI;//位圖文件信息頭
 PAVISTREAM pavi;//AVI流
 PAVIFILE pfile;//AVI文件指針
 AVIFILEINFO * pfi; file://AVI信息
 BOOL AviRead(int mFrame);//讀AVI文件的第mFrame幀
 CAvi();//標(biāo)準(zhǔn)構(gòu)造函數(shù)
 CAviCreate(CString &string);//用文件名初始化AVI類的成員
 virtual ~CAvi();
}; 
//Cavi類文件實現(xiàn)部分;
CAvi::CAvi()
{ AVIFileInit();//初始化AVI庫
 cx=0;//定義圖象寬、高、等成員
 cy=0;
 m_pBMI=NULL;
 pData=NULL;
 file://m_maxFrame=0;
 pfi=NULL;
}
CAvi::~CAvi()//析構(gòu)、釋放指針
{
 // AVIFileClose(pfile);
 AVIFileExit();
 if(pData!=NULL)
  delete pData;
  pData=NULL;

 if(m_pBMI!=NULL)
  delete m_pBMI;
  m_pBMI=NULL;
  if(pfi!=NULL)
   delete pfi;
   pfi=NULL;
}
CAvi::CAviCreate(CString &string)//讀文件初始化該類

 HRESULT hr;
 pfi=new AVIFILEINFO;
 hr = AVIFileOpen(&pfile, // returned file pointer
 string, // file name
 OF_READ, // mode to open file with
 NULL);
 hr= AVIFileInfo(pfile, file://獲取AVI信息,放入pfi中
 pfi, 
 sizeof(AVIFILEINFO) 
);
cx=pfi->dwWidth;//圖象寬、高
cy=pfi->dwHeight;
hr=AVIFileGetStream(//將AVI變成視頻流
pfile, 
&pavi, 
streamtypeVIDEO, 
0//LONG lParam 
);
m_pBMI=new BITMAPINFO;//定義BMP信息頭
m_pBMI->bmiHeader.biBitCount=24;
m_pBMI->bmiHeader.biClrImportant=0;
m_pBMI->bmiHeader.biClrUsed=0;
m_pBMI->bmiHeader.biCompression=BI_RGB;
m_pBMI->bmiHeader.biHeight=cy;
m_pBMI->bmiHeader.biWidth=cx;
m_pBMI->bmiHeader.biPlanes=1;
m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_pBMI->bmiHeader.biXPelsPerMeter=0;
m_pBMI->bmiHeader.biYPelsPerMeter=0;
m_pBMI->bmiHeader.biSizeImage=cx*cy*3;
pData=(BYTE*)new char[cx*cy*3];//根據(jù)AVI中BMP圖象的信息定義緩沖區(qū)
}
BOOL CAvi::AviRead(int mFrame)//將AVI文件的M幀數(shù)據(jù)讀入PData緩沖區(qū)
{
HRESULT hr;
hr= AVIStreamRead( pavi, 
mFrame, 
1, 
pData, 
cx*cy*3, 
NULL, 
NULL
);
if(hr==0)
return TRUE;
else
return FALSE;
}
 
  上述Cavi類實現(xiàn)部分所涉及到的API函數(shù)可以參考微軟提供的MSDN。Cavi類中的pData緩沖區(qū)存放AVI文件中的具體某一幀圖像數(shù)據(jù),同時Cavi類的m_pBMI為BMP圖像文件信息結(jié)構(gòu),這時可以根據(jù)圖像的大小定義BMP圖像文件頭結(jié)構(gòu),關(guān)于BMP文件的存儲,由于篇幅的原因,我不在多講了,有興趣的讀者可以參見筆者的拙作"Visual C++6.0開發(fā)灰度位圖處理"(天極網(wǎng)軟件欄目2001.9.10發(fā)表),該文里面講述了如何存取BMP文件。以上程序在Windows2000、Visual C++6.0環(huán)境下順利編譯通過,運(yùn)行正常。

posted on 2008-09-10 19:30 wrh 閱讀(1085) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区高清| 欧美一级在线视频| 日韩亚洲欧美成人一区| 性色av香蕉一区二区| 亚洲精品久久久久久久久久久久久| 99在线精品免费视频九九视| 久久婷婷久久| 一区二区三区无毛| 久久露脸国产精品| 久久精品91久久久久久再现| 国产日韩欧美不卡| 欧美一区二区三区播放老司机| 一本大道久久精品懂色aⅴ | 欧美区日韩区| 亚洲精品之草原avav久久| 亚洲第一精品在线| 欧美寡妇偷汉性猛交| 亚洲精品视频在线播放| 亚洲国产一区在线| 欧美伦理视频网站| 欧美成人日本| 久久亚洲国产成人| 亚洲国产一二三| 久久久久久久一区二区三区| 欧美激情第4页| 久久成人精品电影| 黄色成人免费网站| 欧美国产精品劲爆| 欧美国产大片| 亚洲一区二区三区777| 亚洲永久在线观看| 激情亚洲网站| 亚洲国产毛片完整版| 欧美日韩一区二区在线观看| 午夜精品视频在线观看| 欧美一级大片在线观看| 在线 亚洲欧美在线综合一区| 欧美不卡高清| 欧美日韩三级| 久久久久久久久久码影片| 蜜桃伊人久久| 亚洲综合精品| 久久亚洲精品一区二区| 欧美一区午夜精品| 最新热久久免费视频| 亚洲电影av在线| 欧美午夜视频网站| 免费在线观看精品| 欧美午夜精品久久久| 久久久欧美一区二区| 欧美美女日韩| 久久久久88色偷偷免费| 欧美.日韩.国产.一区.二区| 午夜久久久久久| 麻豆av福利av久久av| 亚洲欧美国产一区二区三区| 久久婷婷久久| 欧美一区二区三区在线观看视频| 狂野欧美一区| 欧美一区二区视频免费观看| 欧美va天堂| 久久夜色精品国产亚洲aⅴ| 欧美片第一页| 欧美激情视频一区二区三区在线播放 | 在线观看日韩av| 在线视频精品一| 亚洲韩国日本中文字幕| 午夜影视日本亚洲欧洲精品| 一区二区三区精品| 久久综合五月| 欧美在线播放一区二区| 欧美三区视频| 亚洲日本va在线观看| 在线观看视频免费一区二区三区| 一区二区三欧美| 亚洲精品少妇网址| 免费欧美日韩国产三级电影| 久久久久一区二区| 国产女人18毛片水18精品| 日韩午夜免费视频| 久久精品国产一区二区三区免费看| 国产偷国产偷亚洲高清97cao| 日韩一级免费观看| 99re热这里只有精品视频| 噜噜噜91成人网| 老司机午夜免费精品视频| 国产日韩一区欧美| 午夜精品一区二区三区四区| 午夜精品久久久久久久久久久久| 欧美日韩午夜激情| 99国内精品| 中文欧美字幕免费| 欧美日韩在线亚洲一区蜜芽| 日韩视频在线永久播放| 亚洲一区二区三| 国产精品久久久一区二区三区| 一区二区三区产品免费精品久久75| 一区二区三区精密机械公司 | 欧美电影在线播放| 欧美高潮视频| 亚洲开发第一视频在线播放| 欧美激情亚洲一区| 99xxxx成人网| 亚洲欧美激情一区二区| 国产精品日韩在线观看| 亚洲午夜性刺激影院| 欧美一级成年大片在线观看| 国产欧美日本在线| 欧美一级淫片aaaaaaa视频| 久久女同互慰一区二区三区| 亚洲电影观看| 欧美激情亚洲综合一区| 中文一区字幕| 久久天天躁夜夜躁狠狠躁2022| 在线观看亚洲精品视频| 欧美韩日精品| 亚洲综合电影| 牛夜精品久久久久久久99黑人| 亚洲精品一区二区三区蜜桃久| 欧美日韩亚洲视频| 欧美一区二区日韩一区二区| 欧美成人精品在线播放| 99精品视频免费观看视频| 国产精品露脸自拍| 久久综合九色| 一本色道久久综合| 久久人人看视频| 一区二区三区免费观看| 国产字幕视频一区二区| 欧美高清在线观看| 欧美制服丝袜| 夜夜嗨av一区二区三区网站四季av | 亚洲免费视频网站| 国产一区香蕉久久| 欧美日韩另类字幕中文| 亚洲最新视频在线| 国产欧美日韩中文字幕在线| 欧美jjzz| 欧美在线3区| aa级大片欧美三级| 欧美成人四级电影| 久久国产66| 亚洲午夜视频在线| 亚洲国产裸拍裸体视频在线观看乱了| 欧美三级日本三级少妇99| 久久频这里精品99香蕉| 美国成人直播| 国产日韩精品入口| 欧美理论电影网| 久久亚洲捆绑美女| 欧美一级久久久| 亚洲图片自拍偷拍| 日韩视频在线永久播放| 欧美freesex8一10精品| 久久国产免费| 亚洲欧美日韩精品久久| 99综合视频| 亚洲人成7777| 在线看欧美日韩| 激情视频一区| 国内精品美女在线观看| 国产日产精品一区二区三区四区的观看方式 | 久久中文精品| 欧美在线观看视频在线 | 亚洲国内自拍| 欧美成人自拍视频| 毛片精品免费在线观看| 欧美在线播放一区| 欧美亚洲一区在线| 亚洲免费一在线| 亚洲影音一区| 亚洲免费影院| 性欧美xxxx大乳国产app| 亚洲图片欧美午夜| 亚洲天堂网站在线观看视频| 一区二区日韩| 亚洲天堂av高清| 亚洲图片你懂的| 亚洲一区二区三区精品在线观看 | 午夜伦理片一区| 亚洲免费在线视频| 亚洲欧洲99久久| 亚洲欧美日韩中文视频| 午夜精品久久久久久久男人的天堂| 亚洲一区3d动漫同人无遮挡| 亚洲性线免费观看视频成熟| 一本色道久久88综合日韩精品| 日韩午夜黄色| 亚洲一区亚洲| 久久av一区二区三区| 久久亚洲精品中文字幕冲田杏梨| 老司机67194精品线观看| 欧美国产日本在线| 亚洲裸体视频| 亚洲免费在线播放| 久久久久久久久久久一区| 蜜臀99久久精品久久久久久软件| 欧美激情精品久久久久久变态| 欧美性事在线| 樱桃成人精品视频在线播放|