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