基于WINCE的圖片播放器設(shè)計(jì)_第1頁
基于WINCE的圖片播放器設(shè)計(jì)_第2頁
基于WINCE的圖片播放器設(shè)計(jì)_第3頁
基于WINCE的圖片播放器設(shè)計(jì)_第4頁
基于WINCE的圖片播放器設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式計(jì)算機(jī)系統(tǒng)大作業(yè) 題目: 圖片播放器 院系: 電子與信息工程學(xué)院 專業(yè)年級(jí): 電工理論與新技術(shù) 學(xué)生姓名: # 學(xué)號(hào) #同組學(xué)生: # 學(xué)號(hào) # 2013年12月29日目錄一、需求分析11.1 意義11.2 發(fā)展情況11.3 開發(fā)技術(shù)目的2二、系統(tǒng)開發(fā)思想和開發(fā)環(huán)境32.1 系統(tǒng)開發(fā)思想32.2 開發(fā)環(huán)境32.3 采用的技術(shù)及特點(diǎn)3三、開發(fā)模塊劃分和說明43.1 模塊及功能43.2 模塊說明4四、核心代碼及其說明4五、程序運(yùn)行及測(cè)試135.1 運(yùn)行配置135.2 運(yùn)行界面135.3 程序測(cè)試14六、遇到的問題與解決方案及系統(tǒng)特點(diǎn)156.1 遇到的問題與解決方案156.2 系統(tǒng)整體特色15

2、七、心得體會(huì)16I嵌入式系統(tǒng)與優(yōu)化大作業(yè)圖片播放器一、需求分析1.1 意義圖像是現(xiàn)代信息社會(huì)中最基本的信息,它使信息變得栩栩如生,更加符合人們的日常交流習(xí)慣,因此它成為人類獲取和交換信息的主要來源。如今數(shù)字圖像處理的應(yīng)用日益廣泛,逐步成為信息科學(xué)、工程學(xué)、醫(yī)學(xué)等許多學(xué)科的重要基礎(chǔ),同時(shí)作為一種實(shí)用技術(shù)廣泛應(yīng)用于軍事、氣象、交通、探礦、水利、農(nóng)業(yè)甚至娛樂等領(lǐng)域。尤其是價(jià)格低廉的高性能計(jì)算機(jī)和諸如數(shù)碼相機(jī)及掃描儀這樣的圖像采集設(shè)備出現(xiàn)后,數(shù)字圖像處理技術(shù)被大量的應(yīng)用到影視、游戲等公眾及娛樂領(lǐng)域,與人類的生活密切相關(guān)。處理信息量巨大,要求處理速度極高,實(shí)時(shí)產(chǎn)生高質(zhì)量的圖形圖像是我們不斷的追求目標(biāo)。因

3、此本選題具有較好好的實(shí)用價(jià)值和意義。 1.2 發(fā)展情況目前圖像處理的主流應(yīng)用是圖像的壓縮,即通過互聯(lián)網(wǎng)進(jìn)行傳遞或在可視電話和視頻會(huì)議中進(jìn)行動(dòng)態(tài)視頻圖像的壓縮??梢曤娫捠钱?dāng)今結(jié)合計(jì)算機(jī)圖像和傳統(tǒng)圖像處理的技術(shù),以期產(chǎn)生很高壓縮比的交叉領(lǐng)域之一。所有這一切都是圖像的“數(shù)字表達(dá)”這一不可抗拒的發(fā)展趨勢(shì)的組成部分。事實(shí)上,20世紀(jì)最強(qiáng)大、應(yīng)用最廣泛的圖像形式電視圖像,也將不可避免的融入數(shù)字領(lǐng)域。  數(shù)字圖像及其處理技術(shù)之所以發(fā)展的如此迅速并獲得廣泛的應(yīng)用,與其自身的優(yōu)點(diǎn)是息息相關(guān)的。 1.再現(xiàn)性好  數(shù)字圖像處理與模擬圖像處理的根本不同在于,它不會(huì)因圖像的存儲(chǔ)、傳輸或復(fù)制

4、等一系列變換操作而導(dǎo)致圖像質(zhì)量的退化。只要圖像在數(shù)字化時(shí)準(zhǔn)確地表現(xiàn)了原稿,則數(shù)字圖像處理過程始終能保持圖像的再現(xiàn)。 2.處理精度高  按目前的技術(shù),幾乎可將一幅模擬圖像數(shù)字化為任意大小的二維數(shù)組,這主要取決于圖像數(shù)字化設(shè)備的能力?,F(xiàn)代掃描儀可以把每個(gè)像素的灰度等級(jí)量化為16位甚至更高,這意味著圖像的數(shù)字化精度可以達(dá)到滿足任一應(yīng)用需求。對(duì)計(jì)算機(jī)而言,不論數(shù)組大小,也不論每個(gè)像素的位數(shù)多少,其處理程序幾乎是一樣的。換言之,從原理上講不論圖像的精度有多高,處理總是能實(shí)現(xiàn)的,只要在處理時(shí)改變程序中的數(shù)組參數(shù)就可以了。回想一下圖像的模擬處理,為了要把處理精度提高一個(gè)數(shù)量級(jí),就要大幅度

5、地改進(jìn)處理裝置,這在經(jīng)濟(jì)上是極不合算的。3. 適用面寬  圖像可以來自于多種信息源,它們可以是可見光圖像,也可以是不可見的波譜圖像(例如X射線圖像、射線圖像、超聲波圖像或紅外圖像等)。從圖像反映的客觀實(shí)體尺度看,可以小到電子顯微鏡圖像,大到航空照片、遙感圖像甚至天文望遠(yuǎn)鏡圖像。這些來自不同信息源的圖像只要被變換為數(shù)字編碼形式后,均是用二維數(shù)組表示的灰度圖像(彩色圖像也是由灰度圖像組合成的,例如RGB圖像由紅、綠、藍(lán)三個(gè)灰度圖像組合而成),因而均可用計(jì)算機(jī)來處理。即只要針對(duì)不同的圖像信息源,采取相應(yīng)的圖像信息采集措施,圖像的數(shù)字處理方法可適用于任何一種圖像。 4.&

6、#160; 靈活性高  圖像處理大體上可分為圖像的像質(zhì)改善、圖像分析和圖像重建三大部分,每一部分均包含豐富的內(nèi)容。由于圖像的光學(xué)處理從原理上講只能進(jìn)行線性運(yùn)算,這極大地限制了光學(xué)圖像處理能實(shí)現(xiàn)的目標(biāo)。而數(shù)字圖像處理不僅能完成線性運(yùn)算,而且能實(shí)現(xiàn)非線性處理,即凡是可以用數(shù)學(xué)公式或邏輯關(guān)系來表達(dá)的一切運(yùn)算均可用數(shù)字圖像處理實(shí)現(xiàn)。1.3 開發(fā)技術(shù)目的隨著多媒體和互聯(lián)網(wǎng)的快速發(fā)展,圖片瀏覽功能成了絕大部分計(jì)算機(jī)必不可少的基本功能之一。比如Windows操作系統(tǒng)自帶的Windows圖片瀏覽器、ACDSee看圖軟件等,都是為了方便用戶查看、瀏覽及處理圖片的優(yōu)秀軟件。同樣,在相關(guān)嵌入式系統(tǒng)(如手機(jī)

7、、MP4、數(shù)碼相機(jī)等)中,圖片瀏覽也成為了不可或缺的功能。為此,我們專門開發(fā)了一款基于WINCE系統(tǒng)的圖片瀏覽器,主要實(shí)現(xiàn)在WINCE系統(tǒng)上對(duì)圖片進(jìn)行顯示、翻頁、縮放、旋轉(zhuǎn)以及簡(jiǎn)單的效果處理等。我們知道,圖片瀏覽器作為一種常用的應(yīng)用程序,其基本功能都是差不多的,比如顯示一張圖片,放大,縮小,旋轉(zhuǎn)等等,因此我們實(shí)地親自使用了在桌面環(huán)境下的一些圖片應(yīng)用程序,總結(jié)出一些比較基礎(chǔ)的常用功能,來作為我們的程序的需求。二、系統(tǒng)開發(fā)思想和開發(fā)環(huán)境2.1 系統(tǒng)開發(fā)思想我們通過對(duì)一些桌面圖片處理瀏覽程序進(jìn)行研究,總結(jié)了它們的一些基本特征,從而構(gòu)想出我們的設(shè)計(jì)方案。開發(fā)環(huán)境:Windows7開發(fā)工具:Micros

8、oft Visual studio 2005硬件環(huán)境:計(jì)算機(jī)、嵌入式處理器運(yùn)行環(huán)境:Windows7、Microsoft Visual studio 2005、WindowsCE 5.0(不包含圖片瀏覽組件)、億道嵌入式開發(fā)板EELiod270教學(xué)開發(fā)平臺(tái)。2.2 開發(fā)環(huán)境由于本軟件為單機(jī)軟件,不需進(jìn)行大量的數(shù)據(jù)讀寫和數(shù)據(jù)交換,故對(duì)系統(tǒng)硬件配置的要求并不高,只要能夠平穩(wěn)運(yùn)行Windows操作系統(tǒng)的硬件平臺(tái),都能夠使用本軟件。本軟件運(yùn)行平臺(tái)為Microsoft Windows 98/Me/NT/2000/XP/2003/7。 2.3 采用的技術(shù)及特點(diǎn)本軟件采用C#來進(jìn)行圖像編程。其主要特點(diǎn)是:1

9、、C#代碼被編譯成匯編語言,可以直接在處理器上運(yùn)行,效率很高。2、C#直接控制內(nèi)存的分配和釋放,這雖繁瑣,加大了編程的負(fù)擔(dān),但卻能有效地控制內(nèi)存的使用。3、使用C#進(jìn)行圖像處理編程具有更大的靈活性。而在以C#為核心語言的可視化編程工具中,Microsoft Visual Studio以其自身許多優(yōu)異的特性而獲得了最為廣泛的應(yīng)用。鑒于以上的特點(diǎn),本設(shè)計(jì)使用Microsoft Visual Studio 2005作為軟件的開發(fā)平臺(tái)。三、開發(fā)模塊劃分和說明3.1 模塊及功能程序主要實(shí)現(xiàn)四大部分功能,敘述如下:(1) 圖片顯示模塊:包括“打開”“刪除”功能,主要把JPG、PNG、JPEG、GIF、TI

10、F、BMP等格式的圖片打開并顯示在指定位置,或者刪除已經(jīng)打開的圖片。(2) 圖片瀏覽模塊:包括“上一張”“下一張”“關(guān)閉”功能,可以對(duì)文件夾里面的圖片進(jìn)行翻頁瀏覽,以及關(guān)閉瀏覽模式。(3) 圖片縮放模塊:包括“放大”“縮小”功能,對(duì)圖片進(jìn)行縮放。(4) 圖片旋轉(zhuǎn)模塊:包括“左旋轉(zhuǎn)”“右選擇”功能,每次旋轉(zhuǎn)90度。3.2 模塊說明模塊的框圖如下:四、核心代碼及其說明using System;/using System.Linq;using System.Collections.Generic;using System.ComponentModel;using System.Data;using

11、System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections;using System.IO;using System.Drawing.Imaging;namespace PictureBrowser1 public partial class Form1 : Form private String dirPath;/文件所在文件夾路徑 private ArrayList fileInDir;/用ArrayList存儲(chǔ)文件夾中圖片文件 private int index;/圖片文件索引,

12、用以實(shí)現(xiàn)上一張、下一張瀏覽 private String curFile;/當(dāng)前文件夾路徑 private Bitmap curBmp;/當(dāng)前文件夾位圖 public Form1() InitializeComponent(); panel2.AutoScroll = true; /文件打開函數(shù) private void open()if(this.openFileDialog1.ShowDialog() =DialogResult.OK)if(this.pictureBox1.Image != null)this.pictureBox1.Image.Dispose();this.pictur

13、eBox1.Image = null;String filename = this.openFileDialog1.FileName;trycurFile = filename;curBmp = new Bitmap(curFile);this.pictureBox1.Image = curBmp;displayImage();dirPath = filename.Substring(0,filename.LastIndexOf("");System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(dirPath

14、);System.IO.FileInfo fileInfo = dirInfo.GetFiles();fileInDir = new ArrayList();if(fileInDir.Count > 0) fileInDir.Clear();foreach(FileInfo fi in fileInfo)if(fi.Extension = ".JPG" | fi.Extension = ".jpg" | fi.Extension = ".jpeg" | fi.Extension = ".tif" | fi.E

15、xtension = ".png" | fi.Extension = ".bmp" | fi.Extension = ".Bmp" | fi.Extension = ".gif" | fi.Extension = ".GIF")fileInDir.Add(fi.FullName.ToString();for(index = 0;index< fileInDir.Count;index+)if(fileInDirindex.ToString() = filename)break;catch(

16、Exception excep)Console.WriteLine(excep);MessageBox.Show("請(qǐng)選擇后綴名為”JPG/PNG/JPEG/GIF/TIF/BMP”的圖片!", "溫馨提醒!");elseMessageBox.Show("請(qǐng)先選擇一張圖片!", "溫馨提醒!"); /文件關(guān)閉函數(shù)private void close()if(this.pictureBox1.Image != null) this.pictureBox1.Image.Dispose();this.pictureBox

17、1.Image = null;curFile = " "curBmp = null; /下一張private void next()tryif(index = fileInDir.Count - 1)MessageBox.Show("這已經(jīng)是最后一張了.", "溫馨提醒!");elsethis.pictureBox1.Image.Dispose();curFile = fileInDir+index.ToString();curBmp = new Bitmap(curFile);this.pictureBox1.Image = cur

18、Bmp;displayImage();catch (NullReferenceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!");/上一張private void previous() try if (index = 0) MessageBox.Show("這已經(jīng)是第一張了.", "溫馨提醒!");elsethis.pictureBox1.Image.Dispose();curFile = fileInDir-index.ToString();curBmp = new B

19、itmap(curFile);this.pictureBox1.Image = curBmp;displayImage();catch (NullReferenceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!"); /放大函數(shù)private void max()tryint w = (int)(this.pictureBox1.Image.Width * 1.1);int h = (int)(this.pictureBox1.Image.Height * 1.1);Bitmap bmpo = curBmp;B

20、itmap bmpn = new Bitmap(w, h);Graphics g = Graphics.FromImage(bmpn); g.DrawImage(bmpo,new Rectangle(0, 0, w, h),new Rectangle(0, 0, bmpo.Width, bmpo.Height), GraphicsUnit.Pixel);g.Dispose();curBmp = bmpn;this.pictureBox1.Image.Dispose();this.pictureBox1.Image = curBmp;displayImage();catch(NullRefere

21、nceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!"); 縮小函數(shù)private void min()tryint w = (int)(this.pictureBox1.Image.Width * 0.9);int h = (int)(this.pictureBox1.Image.Height * 0.9);Bitmap bmpo = curBmp;Bitmap bmpn = new Bitmap(w, h);Graphics g = Graphics.FromImage(bmpn); g.DrawImage

22、(bmpo, new Rectangle(0, 0, w, h), new Rectangle(0, 0, bmpo.Width, bmpo.Height), GraphicsUnit.Pixel);g.Dispose();curBmp = bmpn;this.pictureBox1.Image.Dispose();this.pictureBox1.Image = curBmp;displayImage();catch(NullReferenceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!");/左旋轉(zhuǎn)pri

23、vate void left()tryBitmap originalBitmap = curBmp;int rotationAngle = 270;int newWidth = originalBitmap.Height;int newHeight = originalBitmap.Width;Bitmap rotatedBitmap = new Bitmap(newWidth, newHeight);#if ALLOW_UNSAFE_CODEinternalRotateImage(rotationAngle, originalBitmap, rotatedBitmap);#elseinter

24、nalRotateImage(rotationAngle, originalBitmap, rotatedBitmap);#endifthis.pictureBox1.Image = rotatedBitmap;curBmp = rotatedBitmap;displayImage();catch(NullReferenceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!");/右旋轉(zhuǎn)private void right()tryBitmap originalBitmap = curBmp;int rotatio

25、nAngle = 90;int newWidth = originalBitmap.Height;int newHeight = originalBitmap.Width;Bitmap rotatedBitmap = new Bitmap(newWidth, newHeight);#if ALLOW_UNSAFE_CODEinternalRotateImage(rotationAngle, originalBitmap, rotatedBitmap);#elseinternalRotateImage(rotationAngle, originalBitmap, rotatedBitmap);#

26、endifthis.pictureBox1.Image = rotatedBitmap;curBmp = rotatedBitmap;displayImage();catch(NullReferenceException)MessageBox.Show("請(qǐng)先打開一張圖片!", "溫馨提醒!");/調(diào)用函數(shù),實(shí)現(xiàn)圖片旋轉(zhuǎn)#if ALLOW_UNSAFE_CODEprivate static void InternalRotateImage(int rotationAngle, Bitmap originaBitmap, Bitmap rotatedBit

27、map)int newWidth = rotatedBitmap.Width;int newHeight = rotatedBitmap.Height; int orignalWidth = orignalBitmap.Width;int orignalHeigth = orignalBitmap.Heigth;int newWidthMinusOne = newWidth-1;int newHeightMinusOne = newHeight-1;BitmapData originalData = originalBitmap.LockBits(new Rectangle(0,0,origi

28、nalWidth, originalHeight), ImageLockMode.ReadOnly, PixelFormat32bppRgb);BitmapData rotatedData = rotatedBitmap.LockBits(new Rectangle(0,0,rotatedBitmap.Width, rotatedBitmap.Height),ImageLockMode.WriteOnly,PixelFormat.Format32bppRgb);unsafeint* originalPoiner = (int*)orignalData.Scan0.ToPointer();int

29、* rotatedPointer = (int*)rotatedData.Scan0.ToPointer();switch(rotationAngle)case 90:for(int y = 0; y < originalHeight; +y)int destinationX = newWidthMinusOne - y;for (int x =0; x < originalWidth; +x)int sourcePosition = (x+y * originalWidth);int destinationY = x;int destinationPosition = (dest

30、inationX + detinationY * nowWidth);rotatedPointordestinationPosition = originalPointorsourcePosition;break;case 270:for (int y=0; y< originalHeight; +y)int destinationX = y;for (int x = 0; x < originalWidth; +x)int sourcePosition = (x+y*originalWidth);int destinationY = newHeightMinusOne - x;i

31、nt destinationPosition = (destinationX + destinationY * newWidth);rotatedPointerdestinationPosition = originalPointorsourcePosition;break;originalBitmap.UnlockBits(originalData);rotatedBitmap.UnlockBits(rotatedData);#else/圖片選擇實(shí)現(xiàn)函數(shù)private static void internalRotateImage(int rotationAngle, Bitmap orig

32、inalBitmap, Bitmap rotatedBitmap) int rotatedWidthMinusOne = rotatedBitmap.Width - 1; int rotatedHeightMinusOne = rotatedBitmap.Height - 1; int originalWidth = originalBitmap.Width; int originalHeight = originalBitmap.Height; switch (rotationAngle) case 90: for (int y = 0; y < originalHeight; +y)

33、 for (int x = 0; x < originalWidth; +x) rotatedBitmap.SetPixel(rotatedWidthMinusOne - y, x, originalBitmap.GetPixel(x, y); break; case 270: for (int y = 0; y < originalHeight; +y) for (int x = 0; x < originalWidth; +x) rotatedBitmap.SetPixel(y, rotatedHeightMinusOne - x, originalBitmap.GetP

34、ixel(x, y); break; #endif /圖片刪除private void delete()DialogResult dlgResult = MessageBox.Show("您確定要?jiǎng)h除此圖片?", "信息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);if(dlgResult = DialogResult.OK)File.Delete(fileInDirindex.ToString();fileInDiri

35、ndex = fileInDir+index;curFile = fileInDirindex.ToString();curBmp = new Bitmap(curFile);this.pictureBox1.Image = curBmp; /圖片顯示自定義private void displayImage()this.pictureBox1.Height = curBmp.Height;this.pictureBox1.Width = curBmp.Width;pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;if (picture

36、Box1.Width < panel2.Width)pictureBox1.Left = (panel2.Width - pictureBox1.Width)/2;elsepictureBox1.Left = 0;if (pictureBox1.Height < panel2.Height)pictureBox1.Top = (panel2.Height - (pictureBox1.Height)/2);elsepictureBox1.Top = 0;點(diǎn)擊界面中的各個(gè)按鈕(如打開、上一張、下一張等),將下面對(duì)應(yīng)的程序輸入進(jìn)去。 private void button1_Click

37、(object sender, EventArgs e) open(); private void button2_Click(object sender, EventArgs e) previous(); private void button3_Click(object sender, EventArgs e) next(); private void button4_Click(object sender, EventArgs e) delete(); private void button5_Click(object sender, EventArgs e) max(); private void button6_Click(object sender, EventArgs e) min(); private void button7_Click(object sender, EventArgs e) right(); private void button8_Click(object sender, EventArgs e) left(); private void button9_Click(o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論