(4).MPEG數(shù)據(jù)流的縮放顯示
放大或縮小MPEG圖像是各種多媒體播放軟件中常用的圖像顯示處理手段。VisualBasic中對(duì)于靜態(tài)圖片進(jìn)行縮放處理可以使用Image控件,將控件的Stretch屬性設(shè)為True,則裝入的圖片會(huì)改變比例適應(yīng)Image控件的范圍,因此對(duì)圖片的縮放處理變成對(duì)Image控件的Height、Width屬性值的大小變化。由于控件的尺寸發(fā)生變化,顯示的點(diǎn)距不能改變,造成顯示點(diǎn)的像素點(diǎn)與圖片不能完全一一對(duì)應(yīng),顯示質(zhì)量明顯變差。只有Image控件才能對(duì)圖片進(jìn)行縮放,如果PictureBox控件不足以顯示整幅圖象,則裁剪圖象以適應(yīng)控件的大小。要想實(shí)現(xiàn)用PictureBox控件實(shí)現(xiàn)對(duì)輸出MPEG圖像的縮放,必須改變MPEG數(shù)據(jù)流的輸出比例,在調(diào)節(jié)PictureBox控件的尺寸去適應(yīng)輸出的MPEG圖像。實(shí)際上,在上面的第3小節(jié)里,為了顯示輸出MPEG圖像已經(jīng)這樣做了。只不過用的是讀取出的MPEG圖像OldWidth、 OldHeight,下面給出一個(gè)以原來的1/2大小輸出MPEG圖像的例子。
pVW.width = OldWidth / 2
pVW.Height = OldHeight / 2
picTV.Left = 135
picTV.Top = 135
picTV.width = pVW.width * 15
picTV.Height = pVW.Height * 15
pVW.Owner = picTV.hWnd
在放大或縮小MPEG圖像的尺寸時(shí)要注意保持Width、Height的比例一致,以免輸出的圖像變形。
(5).鼠標(biāo)拖動(dòng)播放MPEG數(shù)據(jù)流
用鼠標(biāo)拖動(dòng)滾動(dòng)條隨意播放MPEG數(shù)據(jù)流是Windows中多媒體播放機(jī)播放VCD的常用技術(shù)。VB中的Slider 控件是包含滑塊和可選擇性刻度標(biāo)記的窗口,可以通過拖動(dòng)滑塊,用鼠標(biāo)單擊滑塊的任意一側(cè)或者使用鍵盤移動(dòng)滑塊。在選擇離散數(shù)值或某個(gè)范圍內(nèi)的一組連續(xù)數(shù)值時(shí),Slider 控件十分有用。通過將滑塊移動(dòng)到刻度標(biāo)記處,可以對(duì)MPEG數(shù)據(jù)流進(jìn)行定位播放。在窗體上放置一個(gè)Slider 控件Slider 1,設(shè)置好光標(biāo)移動(dòng)的最大步長LargeChange=5,最小步長SmallChange=1,最大移動(dòng)范圍Max=50,實(shí)現(xiàn)程序如下:
Private Sub Slider1_Scroll()
注釋:
Dim pMP As IMediaPosition
Dim v As Double
If Not bOpen Then Exit Sub
bSeeking = True
pMC.Pause
Set pMP = pMC
v = Slider1.Value - Slider1.Min
v = v / Slider1.Max * pMP.Duration
pMP.CurrentPosition = v
Set pMP = Nothing
pMC.Run
注釋:
End Sub
(6).MPEG數(shù)據(jù)流采集時(shí)間的獲取
VisualBasic里提供了一個(gè)函數(shù)FileDateTime可用來獲取文件建立或是更新的日期與時(shí)間。定義一個(gè)局部對(duì)象 pMP 為IMediaPosition的新實(shí)例,令pMP = pMC,給對(duì)象引用pMP賦值;再定義兩個(gè)Double型的變量curpos 、length,將pMP.CurrentPosition賦給curpos,取得MPEG數(shù)據(jù)流的當(dāng)前相對(duì)位置時(shí)間,將pMP.Duration 賦給length,取得MPEG數(shù)據(jù)流的時(shí)間長度值;就能獲取MPEG數(shù)據(jù)流相對(duì)的采集時(shí)間。根據(jù)MPEG采集文件建立的特性將兩個(gè)日期時(shí)間作加法或減法則可以得到MPEG數(shù)據(jù)流的采集時(shí)間。
在整個(gè)MPEG的播放過程中,都要求實(shí)時(shí)顯示MPEG數(shù)據(jù)流的采集時(shí)間,可定義一個(gè)獲取采集時(shí)間的函數(shù),采用Timer控件的Timer事件來驅(qū)動(dòng)。通過引發(fā) Timer 事件,Timer 控件可以有規(guī)律地隔一段時(shí)間執(zhí)行一次函數(shù)獲取到MPEG數(shù)據(jù)流的采集時(shí)間。
4.結(jié)束語
將成熟的圖像壓縮技術(shù)用于電視監(jiān)視監(jiān)控領(lǐng)域具有十分重要的意義。例如:在銀行的監(jiān)視監(jiān)控系統(tǒng)中,由于客戶(銀行)身份的特殊性,在對(duì)冒領(lǐng)他人存款、銀行失竊或被搶劫等擾亂銀行正常工作秩序的事件的調(diào)查及其處理中,采集的壓縮數(shù)據(jù)流是很重要的辦案線索與證據(jù)。在該系統(tǒng)中不僅要求監(jiān)視畫面清晰,采集的數(shù)據(jù)冗余度低,MPEG數(shù)據(jù)流的播放技術(shù)也是很重要的。本文介紹了在Windows環(huán)境下,利用VisualBasic自身?xiàng)l件和原有控件開發(fā)MPEG卡采集的Audio/Video數(shù)據(jù)的播放技術(shù)。充分利用了VB的優(yōu)越條件,靈活地與VB中各種現(xiàn)有控件結(jié)合,開發(fā)出來的MPEG媒體播放器功能完善,回放的MPEG畫面能清晰地重現(xiàn)數(shù)據(jù)采集時(shí)場景、做到了"聞其聲,見其人"、并能準(zhǔn)確確定事件發(fā)生的時(shí)間時(shí)刻。對(duì)只記錄了單幀的Audio/Video數(shù)據(jù)流也能同樣播放。上述技術(shù)已在監(jiān)控系統(tǒng)中使用,并效果良好。