




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.*學院 信息工程系畢業(yè)設計(論文)摘 要圖片瀏覽器是日常應用中必可少的應用軟件之一,本次畢業(yè)設計中,運用C#來設計圖片瀏覽器。文中詳細敘述了瀏覽器的詳細制作過程。采用C#提供的控件數組來實現(xiàn),并對可視區(qū)內的圖形進行局部更新方法進行了詳述。系統(tǒng)功能主要有圖片的瀏覽、預覽、圖片拷貝、刪除、粘貼等功能。并增加了各種鍵盤控制功能。實現(xiàn)了對多種格式圖形的瀏覽,包括gif、JPG、BMP、ICO等圖片格式。本圖片瀏覽程序具有實用性、穩(wěn)定性、易用性,和可維護性的特點,系統(tǒng)留了擴展接口,用戶可以根據實際需要對其功能進行擴充、完善與修改,使其符合自己的要求??傊?,本系統(tǒng)是一個逐步完善的系統(tǒng)。關鍵詞:圖片瀏覽器
2、;控件數組;局部更新目 錄摘 要III目 錄IV第一章 開發(fā)環(huán)境的介紹11.1 C#的由來11.2 C#的特點11.3 .NET開發(fā)平臺3第二章 問題的定義及可行性研究52.1問題的定義52.2可行性研究5第三章 需求分析63.1需求分析階段的任務63.2系統(tǒng)功能的詳細分析6第四章 總體設計74.1總體設計階段的任務74.2圖片瀏覽軟件功能的具體分析8第五章 詳細設計95.1系統(tǒng)功能的詳細設計與實現(xiàn)95.1.1 MainForm窗體:95.1.2 FrmCreateFolder窗體105.1.3 FrmLoadPic窗體105.1.4 PicInfo.cs窗體115.1.5 Folder.cs
3、窗體115.1.6 FrmCreateFolder.cs窗體125.1.7 FrmLoadPic.cs窗體135.1.8 MainForm.cs窗體145.2關鍵技術介紹15第6章 測 試176.1軟件測試的目的和方法176.2 軟件測試的步驟17第7章 總結與展望18致 謝19附錄120:第 21頁 共21頁*學院 信息工程系畢業(yè)設計(論文) 第一章 開發(fā)環(huán)境的介紹1.1 C#的由來在過去的一段時間中,C和C+一直是商業(yè)軟件的開發(fā)領域中最具生命力的語言。雖然他們?yōu)槌绦騿T提供了豐富的功能。高度的靈活性和強大的底層控制力,但是利用C、C+語言開發(fā)的Windows應用程序顯然復雜了很多,同時也犧牲
4、了一定的效率與VB相比,同等級的C、C+完成一個程序往往需要更多的時間來完成開發(fā),因此各層人士都試圖尋找一種新的語言,希望能在功能和功率之間找到一種更為理想的平衡點。針對這一問題,微軟公司與2000年6月26日正式發(fā)布C#。C#是一種最新的、面向對象的編程語言,C#使得程序員可以在Miscrsoft開發(fā)的最新的.NET平臺上快速的編寫應用程序。C#是一種簡單、現(xiàn)代、面向對象且類型安全的編程語言,C#語言從C和C+語言演化而來,同時C#具備了應用程序快速開發(fā)(Rapid Application Development,RAD)語言的高效率和C+固有的強大能力,并吸收了Java和Delphi等語言
5、的特點和精華,是.NET開發(fā)的首選語言。1.2 C#的特點1 .簡潔易用的語法C#主要從C和C+繼承而來,同時吸收Java和Delphi的優(yōu)點,摒棄了C和C+中一些比較復雜而且不常用的語法元素比如父類繼承。使用C和C+時最令程序員生畏的語法是什么?大多數程序員會說:指針!C和C+中的指針雖然功能強大,但極不安全,稍不小心就會導致程序出錯,甚至導致系統(tǒng)奔潰。C#取消了指針,不允許直接對內存進行操作,讓代碼運行在安全的環(huán)境中。此外,C#語法的很多變化無不體現(xiàn)了C#的簡潔之美。2 .自動的資源回收機制C#與.NET的完美集成,使得C#完全擁有.NET的自動回收機制。在windows中,提供給程序使用
6、的一切軟、硬件統(tǒng)稱為資源。比如程序中需要在窗口上畫圖的筆就是一種資源,在早期的windows版本中,程序使用完資源后應該及時解放,否則會導致系統(tǒng)資源不足而運行變慢。在.NET框架中,由于資源使用完后由系統(tǒng)自動清理,所以,編寫C#程序,不必小心翼翼地保證及時釋放資源,從而可以把更多的精力放在程序編寫的邏輯上。3 .與WEB的緊密結合網上辦公和電子商務在各行各業(yè)中的到越來越廣泛的的應用,B/S模式程序的市場需求越來越多。在微軟的.NET開發(fā)套件中,C#與ASP.NET是相互融合的。ASP.NET的應用程序可以使用VB.NET語法,也可以使用C#語法。使用C#語法編寫的ASP.NET結構更嚴謹,運行
7、更高效。由于有了WEB服務框架的幫助,對程序員來說,網絡服務看起來就像是C#的本地對象。程序員們能夠利用他們已有的面對對象的只是和技巧開發(fā)WEB服務。僅需要使用簡單的C#語言結構,C#組件就能夠方便地為WEB服務,并允許它們通過Internet被運行在任何操作系統(tǒng)上的任何語言所調用。4 .完整的安全性與錯誤處理語言的安全性與錯誤處理能力,是衡量一種語言是否優(yōu)秀的重要依據。任何人都會犯錯,即使是最熟練的程序員也不例外,如忘記變量的初始化,對不屬于自己管理范圍內存的空間進行修改等。這些錯誤常常產生難以預計的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡單錯誤的代價是讓人無法估計的。C#的先進設計
8、思想可以消除軟件開發(fā)中的許多常見錯誤,并提供了包括類型安全在內的完整的安全性能。為減少開發(fā)中的錯誤,C#幫助開發(fā)者通過更少的代碼完成相同的功能,這部大減輕了編程人員的工作量同時更有效的避免了從錯誤的產生。5 .版本處理技術升級軟件系統(tǒng)中的組件(模塊)是一件容易產生錯誤的工作,在代碼的修改中可能對現(xiàn)存的軟件產生影響,很有可能導致程序的奔潰。為了幫助開發(fā)人員處理這些問題C#在語言中內置了版本控制功能。C#提供內置的版本支持來開發(fā)費用,使用C#將會使開發(fā)人員更輕易地開發(fā)和維護各種商業(yè)軟件。6 .靈活性和兼容性在簡化語法的同時,C#并沒有失去靈活性。盡管C#不是一種無限制語言,比如:他不能用來開發(fā)硬件
9、驅動程序,在默認的狀態(tài)下沒有指針等,但是學習過程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。7. 快速應用開發(fā)(RAD)功能 支持快速開發(fā)(Rapid application development)可以說是目前開發(fā)語言最為重要的一大功能,也正是C/C+的致命傷。網絡時代應用系統(tǒng)的開發(fā)必須按照網絡時代的速度來進行,支持快速開發(fā)可以使得開發(fā)人員的開發(fā)效率倍增,從而使得他們可以從繁重的重復性勞動中解放出來。c#的RAD功能主要表現(xiàn)在例如垃圾收集、指代等眾多特性上。垃圾收集機制將減輕開發(fā)人員對內存的管理負擔,而指代功能更是可以讓開發(fā)者不經過內部類就調用函數。利用c#的這些功能,可以使開發(fā)者通過較少的代碼來實現(xiàn)更
10、強大的應用程序,并且能夠更好地避免錯誤發(fā)生,從而縮短了應用系統(tǒng)的開發(fā)周期。8. 語言的自由性用C#編寫的程序能最大程度地和任何支持.NET的語言互相交換信息。能夠繼承和使用任何語言所編寫的程序可以稱得上是知識的繼承,這樣做的好處是節(jié)省了大量的工作,你不必把COBOL等語言強行改成另一種語言,.NET讓各種語言真正地互相交流了。9. 強大的Web服務端組件在c#的Web編程中,最讓人興奮的是Web服務端的組件,它們不僅包括傳統(tǒng)組件,還包括那些能夠自動連接五花八門服務的可編程組件,你可以用c#編寫自己的服務器端組件,服務器端組件和標準的HTML提供的服務自然是不一樣的,使用它們可以更自由、更容易地
11、進行數據綁定。不久,那些視頻服務器組件也很快會出現(xiàn),有了這些強大的組件,我們可以設計出功能更加強勁的企業(yè)級分布式應用系統(tǒng)。10. 支持跨平臺隨著互聯(lián)網應用程序的應用越來越廣,人們逐漸意識到由于網絡系統(tǒng)錯綜復雜,使用的硬件設備和軟件系統(tǒng)各不相同,開發(fā)人員所設計的應用程序必須具有強大的跨平臺性。C#編寫的應用程序就具有強大的跨平臺性,這種跨平臺性也包括了c#程序的客戶端可以運行在不同類型的客戶端上,比如PDA、手機等非PC裝置。11. 與XML的融合由于XML技術真正融入到了.NET和c#之中,c#的編程變成了真正意義的網絡編程,甚至可以說.NET和c#是專為XML而設計,使用C#的程序員可以輕松
12、用c#內含的類來使用XML技術。就這方面而言,目前c#提供給了程序員更多的自由和更好的性能來使用XML。12. 對C+的繼承C#繼承并保留了C+強大的功能,例如, c#保留了類型安全的檢測和重載功能,c#還提供了一些新功能取代了一些原來的ANSI C預處理程序的功能,提高了語言的類型安全等安全性1.3 .NET開發(fā)平臺.NET是一個用于建立應用程序的平臺,它在內部封裝了大量的功能強大的應用程序接口函數(API),利用這些函數可以開發(fā)各類Windows應用軟件。.NET還是一個開發(fā)平臺,它向廣大的程序員提供了功能強大的集成開發(fā)環(huán)境(IDE)Visual Studio .NET。在未來,.NET還
13、是一個運行、發(fā)布應用程序的平臺,它可以將應用程序作為一種服務,通過Internet提供給分布在世界各個角落的網絡用戶。.NET平臺對早期的開發(fā)平臺作了重大改進。.NET提供了一種新的軟件開發(fā)模型,它允許用不同程序設計語言創(chuàng)建的應用程序能相互通信。這個平臺也允許開發(fā)者創(chuàng)建基于Web的應用程序,這些應用程序能夠發(fā)布到多種不同的設備(甚至是無線電話)和臺式機上。Microsoft的.NET 計劃為利用Internet和Web進行軟件的開發(fā)、設計和使用開辟了廣闊的新前景。.NET策略的一個主要方面是它與具體的語言或平臺無關。它不需求程序員使用惟一的一種程序設計語言。程序員可以將多種與.NET兼容的語言
14、(圖1-1)結合起來開發(fā).NET應用程序。多個程序員可以共同參與同一個軟件項目,每個人可以使用自己最精通的.NET語言(如Visual C+ .NET、C#、Visual Basic®和其他許多語言)來編寫代碼。第二章 問題的定義及可行性研究2.1問題的定義開發(fā)的圖片瀏覽器要具備良好的人機交互界面、對圖片實現(xiàn)分目錄管理用戶可以自行創(chuàng)建并刪除存放圖片的目錄、對目錄下的圖片以縮略圖的方式進行瀏覽、以實際大小或適合窗體大小瀏覽、對同目錄下的圖片以自動播放形式進行瀏覽并可以調整播放時間。圖片瀏覽器難點在于縮略圖的顯示,如果一個目錄中有很多圖片,而每張圖片的尺寸都比較大,把每張圖片都縮小并顯示
15、出來需要花費很長的時間,這樣會導致應用程序的假死現(xiàn)象(在沒有完成某項工作之前,應用程序無法進行其他操作)。2.2可行性研究處理這個問題可以采取多線程的方法,把顯示縮略圖的過程放在一個線程內,這樣在顯示縮略圖的過程中可以進行其他操作。另外一種解決方法是給每張圖片生成一張縮略圖,并存放于數據庫中,在瀏覽縮略圖時,直接從數據庫中讀取縮略圖并顯示。由于縮略圖非常小,并且是未經壓縮的格式,讀取速度非???,這樣就能以很快的速度顯示完所有圖片的縮略圖。本次設計另辟蹊徑,以達到類似效果。在導入圖片的同時,為圖片生成100*100像素的bmp格式的縮略圖(如果原圖的長和寬都小于100像素,則按原圖尺寸生成縮略圖
16、),把原圖和縮略圖分別存放于兩個目錄內,并一一對應。通過原圖的文件名可以找到相對應的縮略圖,如果縮略圖不存在,則即時生成相應的縮略圖。實踐證明這樣做的效果令人滿意,能比較順暢的現(xiàn)實多張圖片的縮略圖。第三章 需求分析3.1需求分析階段的任務 1.分析該設計要實現(xiàn)哪些功能(1)可以對目錄下的圖片以縮略的方式進行瀏覽,并在瀏覽過程中可以刪除一張或多張圖片。(2)可以以實際大小或適合窗體尺寸的方式對單張圖片進行瀏覽,并可以切換到同目錄下的上一張圖片或下一張圖片瀏覽。也可以對同目錄下的圖片以自動播放的形式進行瀏覽,并可以調整自動播放的時間間隔。(3)可以在瀏覽某張圖片時將其刪除。(4)可以以全屏幕的方式
17、瀏覽圖片。 2.分析該設計功能實現(xiàn)的步驟及過程 (1)主窗體,可以用于瀏覽和查看圖片。 (2)目錄窗體,用于創(chuàng)建圖片的管理目錄。 (3)導入圖片窗體,用于向目錄中導入圖片。 3.2系統(tǒng)功能的詳細分析具有良好的人機交互界面,有一定的計算機操作經驗的用戶可以不經任何培訓就可以直接使用該軟件。 對圖片實現(xiàn)分目錄管理,用戶可以自行創(chuàng)建并刪除存放圖片的目錄,并可以方便地將各種圖片存放于相應的目錄之中。 可以對目錄下的圖片以縮略圖的方式進行瀏覽,以方便用戶從眾多圖片中查找出自己想要的圖片,并在瀏覽過程中可以刪除一張或多張圖片。 可以以實現(xiàn)大小或適合窗體尺寸的方式對單張圖片進行瀏覽,并可以切換到同目錄下的上
18、一張圖片或下一張圖片進行瀏覽。也可以對同目錄下的圖片以自動播放的形式進行瀏覽,并可以調整播放的時間間隔。 可以為創(chuàng)建的目錄導入或刪除圖片。 可以手動的進行圖片的瀏覽。該圖片瀏覽器應該具有新增目錄,刪除目錄,導入圖像,刪除圖像,退出等功能,還有的功能可以在設計中不斷完善。 第四章 總體設計4.1總體設計階段的任務 1. 界面設計:程序包括三個窗體。(1)MainForm窗體:程序的主窗體,可以用于瀏覽和查看圖片,并對圖片進行管理。如圖41圖41 。 (2)FrmCreateFolder窗體:創(chuàng)建目錄窗體,用于創(chuàng)建圖片的管理目錄。如圖42圖42 (3)FrmLoadPic窗體:導入圖片窗體,用于向
19、目錄中導入圖片。如圖43圖43 2. 代碼編寫:代碼包括5個文件。 (1) MainForm.cs:主窗體MainForm的代碼文件。 (2) FrmCreateFolde.cs:創(chuàng)建目錄窗體FrmCreateFolder的代碼文件。 (3) FrmLoadPic.cs:導入圖片窗體FrmLoadPic的代碼文件。 (4) PicInfo.cs:PicInfo類代碼文件。 (5) Folder.cs:Folder類代碼文件。4.2圖片瀏覽軟件功能的具體分析 1.目錄:自己手動創(chuàng)建一個圖片存儲目錄。 2.目錄:把已經創(chuàng)建的一個圖片存儲目錄刪除。 3.圖像:導入一張圖片到創(chuàng)建的目錄中去。 4.圖像
20、:刪除一張在已經創(chuàng)建的目錄中的圖片。5.和后退按鈕:手動控制圖片的前后瀏覽。第五章 詳細設計 5.1系統(tǒng)功能的詳細設計與實現(xiàn)5.1.1 MainForm窗體:(1). 創(chuàng)建一個新項目“圖片管理器”。把窗體改名為MainForm,并設置它的屬性。(2)在窗體中放置一個ToolStrip控件,再添加5個工具按鈕并進行改名和設置屬性。(3)在工具欄中添加2個Separator。再在窗體中放2個ToolStrip控件并進行命名和屬性的設置,再添加6個工具按鈕,1個組合框,2個分隔條,并進行相應的屬性改寫。(4)在窗體上放置1個StatusStrip控件,它自動放置在窗體的最底部,在狀態(tài)欄中添加1個Pr
21、ogressBar和1個StatusLabel。(5)在窗體上放置1個ListBox控件并進行屬性設置。(6)在LstFolder控件右邊放置一個Splitter控件,它會自動貼向LstFolder的右邊界靠齊,這個控件的作用是可以再程序運行時改變它左邊和右邊控件的寬度。(7)在Splitter控件的右側放置1個Panel控件,并設置它的屬性。(8)在panel1上放置1個ListView控件,它用于顯示一個目錄下所有圖片的縮略圖。把它的OwnerDraw屬性設置為true,設置這個屬性后就可以手動繪制ListView內各個項的圖標。并把View屬性設置為LargeIcon,這樣ListVie
22、w就會以大圖標的方式顯示里面的每個項。在窗體上放置1個ImageList控件,并進行相關屬性設置。在這里,ImageSize控件的作用并不是存放圖片,而是控制ListView各個項的繪圖區(qū)域的大小。(9)在panel1上放置1個PictureBox控件,命名為pbPic,用于顯示單張圖片。(10)在窗體上放置1個OpenFileDialog控件。(11)在窗體上放置1個Tinner控件,把它的Interval書信設置為2000。至此,主窗體界面制作完畢。如圖51所示5.1.2 FrmCreateFolder窗體(1)新建一窗體,命名為FrmCteateFolder。(2)在窗體中放置1個Tex
23、tBox控件,命名為txtFolderName。 (3)在窗體中放置2個Button控件,分別命名為btnOK和btnCancel。并把它們的Text屬性設置為“確定”和“取消”。 5.1.3 FrmLoadPic窗體(1)新建一窗體,命名為FrmLoadPic。(2)在窗體上放置1個ComboBox控件,命名為cbFolder。DropDownStyle屬性設置為:DropDownList(3)在窗體上放置1個CheckedListBox控件,命名為chklsPic。HorizontalScrollbar屬性設置為true。(4)在窗體上放置1個TextBox控件,命名為txtPicName
24、。(5)在窗體上放置4個Button控件。(6)在窗體上放置1個OpenFileDialog控件,命名為openFileDialogSelPic,并把它的Multiselect屬性設置為true。 代碼編寫MainForm.cs:主窗體MainForm的代碼文件。FrmCreateFolder.cs:創(chuàng)建目錄窗體FrmCreateFolder的代碼文件。FrmLoadPic.cs:導入圖片窗體FrmLoadPic的代碼文件。PicInfo.cs:PicInfo類代碼文件。Folder.cs:Folder類代碼文件。5.1.4 PicInfo.cs窗體在解決方案資源管理器中的圖片管理器項目上右擊
25、鼠標,在彈出菜單中選擇添加新建項。在添加新項窗口中選擇類,在名稱編輯框內輸入“PicInfo.cs”。最后單擊添加按鈕添加一個新的類。PicInfo是一個自定義的類,什么是類?可以這樣去理解:類可以存放某些信息,并能實現(xiàn)特定功能。類里有屬性和方法,就好比銀行的提款機,通過使用提款機,可以查詢賬戶里還有還剩多少錢,也可以通過提款機取錢。在編程中定義類是為了把一些相關的功能包裝起來,放在一起,以方便在程序中使用。Private string _fullName;Private string _nameNoExtension;這兩行代碼聲明了兩個私有成員變量,這兩個成員變量供類內部使用,類的外部不可
26、以直接訪問它們,但可以通過屬性來訪問和設置它們的值。Public override string ToString ()Return _fullName;這幾行代碼,重載了ToString()方法,由于PicInfo類的作用是把類實例作為項存放于復選列表框內。而每個項顯示的文字正是通過訪問ToString()方法而獲得,重載這個方法,正是為了在復選列表框內顯示指定的文字。5.1.5 Folder.cs窗體 在(解決方案資源管理器)中的(圖片管理器)項目上右擊鼠標,在彈出菜單中選擇(添加)(新建項)。在(添加新項)窗口中選擇(類),在(名稱)編輯框內輸入“Folder.cs”。最后單擊(添加)按
27、鈕添加一個新的類。 在第一次瀏覽一個目錄時,需要從硬盤讀取這個目錄下的所有縮略圖并顯示,此時所有縮略圖被載入內存。如果切換到其他目錄時就從內存中釋放這些數據,再次瀏覽這個目錄時就導致程序重新從硬盤讀取數據,這樣會使得縮略圖的顯示速度變慢(內存的速度遠勝于硬盤)。本案例中,只要瀏覽了某個目錄,就讓這個目錄下的所有縮略圖常駐于內存,以供下次瀏覽時調用,直到應用程序關閉為止。這樣做可能導致程序的內存使用加大,但在一定程度上彌補了沒有使用多線程技術的遺憾。Folder類正是用于實現(xiàn)這個功能的,它封裝了縮略圖的生成、讀取、刪除、計算邊界的功能。 Foreach (string sourceFile in
28、 Directory.GetFiles(_sourcePath) 這一行的Directory.GetFiles(_sourcePath)方法訪問指定文件夾(_sourcePath)中的所有文件,并將它們的文件名存放于字符串數組中返回。 Public override string ToString() Return _name; 這幾行代碼重載了ToString()方法,這樣做是為了在ListBox內顯示指定的字符串,即目錄名稱。5.1.6 FrmCreateFolder.cs窗體打開FrmCreateFolder的設計窗體,分別雙擊(確定)和(取消)按鈕,為它們生成按鈕的單機事件。 FrmC
29、reateFolder窗體的作用是創(chuàng)建一個新的圖片管理目錄,所有圖片都存放于可執(zhí)行文件所在目錄下的(圖片目錄)文件夾之下,新建一個管理目錄會在(圖片目錄)文件夾下創(chuàng)建一個以管理目錄命名的文件夾。由于FrmCreateFolder窗體需要操作主窗體的列表框控件,這就會涉及在不同窗體間傳遞參數的問題。在不同窗體間傳遞參數有很多種方法,本案例只使用其中的一種,就是在窗體構造方法中傳遞參數,這就需要重載窗體的構造方法。Public FrmCreateFolder()InitializeComponent();這幾行代碼是Visual Studio 2005自動問窗體生成的構造方法。Public Frm
30、CreateFolder(ListBox lst)InitializeComponent();lstFolder=lst; 這幾行代碼則是手動編寫的重載的構造方法。它使用了一個ListBox類型的參數,由于ListBox是一個引用的類型,這樣當主窗體把一個ListBox類型當做參數傳遞給FrmCreateFolder窗體的構造方法后,就可以在FrmCreateFolder窗體中控制這個ListBox。Private ListBox lstFolder;這行代碼聲明了一個ListBox類型的成員變量,用于存放從構造方法傳遞進來的ListBox引用,以方便在整個窗體范圍內進行調用。String p
31、ath=Application.StartupPath+圖片目錄這行代碼中的Application.StartupPath屬性返回當前程序可執(zhí)行文件所在路徑。5.1.7 FrmLoadPic.cs窗體 打開FrmLoadPic窗口,雙擊窗口空白處,為窗口生成一個load事件,F(xiàn)rmLoadPic窗體用于將圖片導入程序目錄中,它需要控制主窗體中的列表框和狀態(tài)欄兩個控件,所以在這幾行代碼的重載構造方法中使用了兩個參數,以傳遞對這兩個控件的引用。 OpenFileDialogSelPic.Filter=“圖像文件(*.BMP;*.JPG;*.GIF;“+”*.jpeg;*.ico) *.BMP;*.
32、JPG;*.GIF;*.jpeg;*.ico”;這行代碼設置打開文件對話框的文件篩選器,這樣在使用打開文件對話框時,就只能選擇指定的文件類型。 雙擊(瀏覽)按鈕,生成一個按鈕的單擊事件。為復選列表框chklsPics生成一個SelectedIndexChange事件。雙擊(修改)按鈕,生成一個按鈕的單擊事件。 PicInfo picInfo=new PicInfo(s); 這行代碼使用了前面所編寫的PicInfo類,編寫它的主要原因是如果給圖像改名,需要有地方存放修改后的名字。 chklsPics.Items.Add(picInfo,true); 這行代碼直接將上一行代碼所創(chuàng)建的PicInfo
33、對象作為元素添加進復選列表框內。復選列表框的項所顯示的文字將是PicInfo對象的ToString()方法所返回的字符串。 分別雙擊(確定)和(取消)按鈕,為它們生成按鈕單擊事件, 載入圖像時,需要考慮一下幾個因素。 1.由于可以從多個路徑選擇圖片,有可能出現(xiàn)圖片文件名相同但路徑不同的情況,把它復制到同一文件夾時會由于文件名相同而導致出錯。 2.在把圖片復制到某文件夾時,文件夾有可能本身已有同名的文件,這樣同樣會導致出錯。常見的解決方案如看圖軟件ACDSee,在復制過程中如出現(xiàn)同名文件,將彈出提示窗口,供用戶進行改名或放棄復制操作。本案例使用了不同的方法,出現(xiàn)同名文件時并不提示用戶,而直接給圖
34、片改名。 給圖片重命名的算法如下所述: 1.給取目的文件夾(所有圖片將被復制到這個文件夾)下的所有已存在的圖片名稱,并放入Arraylist內。 2.將ArrayList內的圖片名稱從小到大進行排序。3.在圖片被復制到目的文件夾之前,首先跟ArrayList內的圖片名稱一一對比,如果發(fā)現(xiàn)同名文件,則在文件名后加“-”號和數字“1”。把更改后的名稱繼續(xù)跟ArrayList內的下一個圖片名稱進行對比,如果重名,則把數字“1”變?yōu)椤?”。直到在ArrayList內找到比它大的名稱,則把它插入到這個位置。4.將圖片復制到目的文件夾,對下一張圖片重復第步操作,直到所有圖片被復制到目的文件夾為止。5.1.
35、8 MainForm.cs窗體 雙擊(新增目錄)工具按鈕,生成按鈕的單擊事件,這里使用模式窗體的方式打開前面所創(chuàng)建的FrmCreateFolder窗體。 雙擊(刪除目錄)工具按鈕,生成按鈕的單擊事件 雙擊(導入圖像)工具按鈕,生成按鈕的單擊事件 選中l(wèi)vView控件,在事件窗口中雙擊DrawItem事件,生成一個繪制項的事件,當ListView的OwnerDraw屬性為true時,可以通過DrawItem事件手動繪制ListView中的每一個項。在DrawItem事件方法中,參數e的Bounds屬性返回這個項所占用的矩形,可以在這個矩形里繪制圖形和文字。 選中列表框lstFolder,為它生成
36、一個SelectedIndexChanged事件 為(刪除圖像)和(退出)工具按鈕分別生成單擊(Click)事件 選中l(wèi)vView控件,在事件窗口中雙擊DoubleClick事件,生成一個事件 分別雙擊窗體下方工具欄的(返回目錄)、(上一幅圖像)(tsbtnPeriod)、(下一幅圖像)(tsBtnNext)工具按鈕,為它們生成相應的單擊事件顯示圖像有兩種模式: 1 .按原圖尺寸顯示:當圖像尺寸大于裝載它的容器(panell)時,則顯示圖像的中間部分。2 .顯示全圖:當圖像尺寸大于裝載它的容器時,則按比例對原圖進行縮放,以適合容器大小。當圖像尺寸小于裝載它的容器時,則在容器中央顯示原圖。自定義
37、方法MatchImage()正是用于計算圖像的顯示尺寸,以對PictureBox控件尺寸進行調整并正確地顯示圖像。雙擊(自動播放)(tsbtnAutoPlay)按鈕,生成一個按鈕的單擊事件。雙擊timerl控件,生成一個定時器事件。選中工具欄上的組合框(tscbInterval)控件,并為它生成一個SelectedIndexChanged事件同時選中(實際大?。?tsbtnNormal)和(合適大?。?tsbtnMatch)兩個工具按鈕控件,打開事件窗口,在Click事件內輸入“tsbtnShowMode_Click”后按Enter鍵,為兩個按鈕生成一個共同的單擊事件選中pbPic控件,并分別
38、為它生成MouseDown、MouseMove、MorseUp三個事件。當圖像處于實際大小狀態(tài)時,如果原圖尺寸大于裝載它的容器的尺寸時,圖像無法顯示完全,這時應該允許用鼠標拖動圖像以瀏覽圖像的任何部分。實現(xiàn)圖像拖動功能需要使用三個事件。1.按下鼠標左鍵時,設置一個標志(isDraging),表明允許圖像被拖動,并記錄但是鼠標和PictureBox所處的位置,以方便后面拖動圖像時計算圖像位置。2.松開鼠標左鍵時,設置標志(isDraging),表明圖像不允許被拖動。3.移動鼠標時,判斷標志(isDraging),如果標志的值為真,表明鼠標左鍵還處于被按下狀態(tài),這時可以拖動圖像。如果標志的值為假,
39、則表明鼠標左鍵已經不處于被按下狀態(tài),這時不能拖動圖像。拖動圖像的功能通過改變PictureBox的位置來實現(xiàn),需要注意一下幾點問題。1.如果裝載圖像的容器大于圖像尺寸,則不允許拖動圖像;2.當圖像的寬小于容器的寬,而圖像的高大于容器的高時,只允許垂直拖動圖像。3.當圖像的高小于容器的高,而圖像的寬大于容器的寬時,只允許水平拖動圖像。4.當圖像左邊界到達容器左邊界時,不允許再向右拖動圖像。 5.當圖像右邊界到達容器右邊界時,不允許再向左拖動圖像。6.當圖像上邊界到達容器上邊界時,不允許再向下拖動圖像。7.當圖像下邊界到達容器下邊界時,不允許再向上拖動圖像。 5.2關鍵技術介紹 圖片瀏覽器難點在于
40、縮略圖的顯示,如果一個目錄中有很多圖片,而每張圖片的尺寸都比較大,把每張圖片都縮小并顯示出來需要花費很長的時間,這樣會導致應用程序的假死現(xiàn)象(在沒有完成某項工作之前,應用程序無法進行其他操作)。處理這個問題可以采取多線程的方法,把顯示縮略圖的過程放在一個線程內,這樣在顯示縮略圖的過程中可以進行其他操作。另外一種解決方法是給每張圖片生成一張縮略圖,并存放于數據庫中,在瀏覽縮略圖時,直接從數據庫中讀取縮略圖并顯示。由于縮略圖非常小,并且是未經壓縮的格式,讀取速度非??欤@樣就能以很快的速度顯示完所有圖片的縮略圖。 本次設計另辟蹊徑,以達到類似效果。在導入圖片的同時,為圖片生成100*100 像素的
41、bmp格式的縮略圖(如果原圖的長和寬都小于100像素,則按原圖尺寸生成縮略圖),把原圖和縮略圖分別存放于兩個目錄內,并一一對應。通過原圖的文件名可以找到相對應的縮略圖,如果縮略圖不存在,則即時生成相應的縮略圖。實踐證明,這樣做的效果令人滿意,能比較順暢的現(xiàn)實多張圖片的縮略圖。第6章 測 試 6.1軟件測試的目的和方法 軟件測試的目的,第一是確認軟件的質量,其一方面是確認軟件做了你所期望做的事情,另一方面是確認軟件以正確的方式來做了這個事情。第二是提供信息,比如提供給開發(fā)人員或程序經理的回饋信息,為風險評估所準備的信息。第三軟件測試不僅是在測試軟件軟件產品本身,而且還包括軟件開發(fā)的過程。如果一個軟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河北省定州市輔警招聘考試試題題庫附答案詳解(完整版)
- 2025年Z世代消費習慣研究:新消費品牌如何提升用戶忠誠度報告
- 2025年K2學校STEM課程實施與教師教學反思研究報告
- 膀胱腫瘤整塊切除術手術技術2025
- 初中數學九年級下冊統(tǒng)編教案 6.5相似三角形的性質(第1課時)
- 2025屆高考物理大一輪復習課件 第九章 第49課時 專題強化:帶電粒子在電場中的力電綜合問題
- 抗炎緩解治療藥物
- 2025年父親節(jié)小學生國旗下講話稿-父愛如山溫暖相伴
- 物流司機培訓試題及答案
- 安徽省安慶市太湖縣部分學校聯(lián)考2025屆九年級下學期中考二模歷史試卷(含答案)
- 中國絲綢簡述ppt課件
- 蘇軾《浣溪沙》優(yōu)秀課件
- 塑料包裝袋購銷合同
- 生產良率系統(tǒng)統(tǒng)計表
- 代理機構服務質量考核評價表
- 淺談打擊樂器在小學低段音樂課堂中的運用
- 2018年瀘州市生物中考試題含答案
- S7、S9、S11系列變壓器損耗表
- 消防電氣檢驗批質量驗收記錄表
- 品控員作業(yè)指導書
- 醫(yī)療器械質量手冊含程序文件
評論
0/150
提交評論