visual studio(C++)实现“照片电影”播放器
VS C++實現(xiàn)“照片電影”播放器的軟件架構(gòu)和技術(shù)簡介
前言:
??這個播放器是兩年前我大三時上多媒體課的結(jié)課大作業(yè),代碼部分有瑕疵是肯定的,希望有需要的人能夠自己進(jìn)行代碼優(yōu)化。當(dāng)時我找了好久都沒有用VS C++實現(xiàn)“照片電影”播放器的博客,經(jīng)過幾天的煎熬,我終于想到了如何設(shè)置“定時器”來控制照片的播放和暫停后再播放。此博客僅供分享,如需要源代碼做參考,請訪問我的GitHub賬號:https://github.com/Daisy-gj 。
以下內(nèi)容全部原創(chuàng),轉(zhuǎn)載請聯(lián)系我。
1. 軟件介紹
??本軟件是一款簡易的“照片電影播放器”–支持前端自選背景音樂(可試聽),播放(及多張照片按照一定間隔時間自動逐一顯示)后臺存儲的bmp文件的系統(tǒng)(bmp文件存儲在源文件夾中,使用者可以自行用同名bmp文件更換)。相鄰照片的出現(xiàn)間隔時間可在后臺修改,播放過程中可以暫停播放。
2. 軟件設(shè)計的背景
??本軟件的靈感來自于小米手機(jī)的相冊自帶的小軟件“照片電影”。
手機(jī)上的“照片電影”支持自選照片,音樂,風(fēng)格,并輸出成片保存。但因為我個人水平限制,目前只能做到支持背景音樂選擇,后臺存儲要播放的照片。我嘗試過在可視化結(jié)果界面上添加選擇本機(jī)文件的按鈕,但是選擇文件的面板為Myform與Menu不在同一界面上,無法進(jìn)行有效關(guān)聯(lián),所以放棄了。
??背景音樂支持試聽播放和暫停,我嘗試過使用MediaSession和PlaySound,最終選擇了PlaySound,因為軟件的功能要求對音頻不是很高,使用PlaySound完全可以滿足要求。
?? 在音樂和圖片的播放控制控制方面,我使用了flag(一些bool型的變量)去進(jìn)行狀態(tài)判斷,從而進(jìn)行播放、暫停控制。
3. 使用說明
圖1.0 系統(tǒng)主界面
暫停:點擊播放設(shè)置的下拉選擇框中的暫停按鈕,將停止播放照片和音樂,且系統(tǒng)將暫停。
選擇照片:自選的bmp文件可改為源代碼文件夾中的同名bmp文件,對其進(jìn)行替換,實現(xiàn)自選照片。
退出系統(tǒng):可點擊窗口的叉號退出,也可以點擊系統(tǒng)管理中的退出按鈕進(jìn)行退出。
4. 軟件使用示意視頻
? 我很早就卸載VS了····準(zhǔn)備為這個視頻重裝···但VS更新后要求C盤16G空間·····我裝不上。那有需要的去我GitHub下載源碼吧,自己跑吧,保證能用!
5. 軟件環(huán)境及功能結(jié)構(gòu)圖
軟件環(huán)境及語言
Microsoft Visual Studio2012
C++
功能結(jié)構(gòu)
?本軟件主要分為兩個模塊:音頻播放,圖片播放。
(1)音頻播放主要使用的技術(shù):PlaySound
(2)圖片播放主要使用的技術(shù):LoadImage、GetDIBits(圖片加載)、setTimer(定時器)
?下圖5.0為整個系統(tǒng)的功能結(jié)構(gòu)圖:
6. 軟件技術(shù)說明
??主要寫難點部分—圖片播放。音樂播放、控制、選擇只是簡單的在“分析菜單選擇”中使用palysound()函數(shù)和bool型變量判斷。
??①圖片加載方式選擇:
??關(guān)于圖片加載到繪圖部分的方式,我嘗試了所有實驗給出的方法,最終選擇了loadimage()。但是loadimage有一個很大的缺陷(我個人在查閱資料后無法解決),就是它無法讀取存儲路徑為char *型的路徑的文件(LPCWSTR格式不匹配,轉(zhuǎn)格式后運行程序無法識別代碼),所以我將所有的文件加了一個int型的變量做控制逐一進(jìn)行加載。但是這樣做很冗余。我的代碼如下:
??上述代碼應(yīng)用于定時器調(diào)用的圖片更換函數(shù)changeimg()中。在開始時,應(yīng)就將第一幅圖片加載到繪圖處,因為定時器是只要運行就直接開始調(diào)用圖片更替函數(shù)的,所以開始顯示部分不能沒有圖片。
??②定時器更新圖片后圖片的加載問題:
?? 因為繪圖部分(WM_PAINT)是只有當(dāng)窗體的無效區(qū)發(fā)生變化后才能重新更新繪圖的,所以,定時器的更新圖片的結(jié)果無法自動的顯示到繪圖區(qū)(如果不加以處理)。
??為了解決這個問題,我嘗試在WM_TIMER中增加updateWindows()函數(shù),但是沒有作用(要起作用就必須調(diào)整窗口,給窗口一個信號)。最終,我想起了“水波紋”實驗中的動態(tài)的“水波紋”的顯示,其原理與我要做的圖片播放器原理相同,所以我最終在WM_TIMER中做出了如下更改:
??簡單來說,就是每次定時器調(diào)用了更新圖片函數(shù)后,就會將這個圖片直接加載到繪圖區(qū),不需要通過WM_PAINT進(jìn)行繪圖。
??③音樂與圖片播放的同步控制:
?? 這個實現(xiàn)起來很簡單,就是在“分析菜單”處,點擊播放的情況下,將播放圖片控制的flag變?yōu)閠rue,同時在case中使用playsound函數(shù)播放音樂。點擊暫停的情況下,將播放圖片控制的flag變?yōu)閒alse,同時在case中使用playsound(null…)函數(shù)。代碼如下:
7. 心得體會
??底層的東西要做實際的應(yīng)用還是比較復(fù)雜的。開始時,我想著做一個與手機(jī)上功能類似的照片電影播放器,但是最終因為沒法實現(xiàn)淡入淡出、人臉(重要位置)放大縮小等就與實際產(chǎn)品產(chǎn)生了差距。但是在實踐的過程中,我覺得以后要做一個軟件還是要選擇合適的環(huán)境和語言,這次的播放器因為個人水平限制和語言的庫函數(shù)的限制,就很難做好功能。同時也讓我明白了,查函數(shù)的手冊的重要性,好多函數(shù)理解意思后很容易就能實現(xiàn)想要的功能,而不用自己去編寫。
??再次提醒,本程序的源代碼在我的GitHub上可下載完整可運行的:https://github.com/Daisy-gj
總結(jié)
以上是生活随笔為你收集整理的visual studio(C++)实现“照片电影”播放器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中 jacob作用_jacob
- 下一篇: s3c2440移植MQTT