




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中級程序設計報告給自己打分:80自我評價:我做了一個簡易的圖片查看器,可以打開一個文件夾的圖片查看,能實現一些簡單的上一張下一張,能七種切換效果隨機調用,能放大縮小,能用鼠標移動圖片,還可以將listbox1里的圖片自動播放。一、大作業(yè)內容1、描述所完成的程序功能,需要實現的目標1、用遍歷方式打開一個文件夾中的圖片,將所有的圖片名放在listbox1中,picture box1顯示圖片。2、可以用菜單欄中的清空、上一張、下一張、改變picturebox1中的圖片,也可以點擊listbox1中的圖片名顯示圖片。3、另外一個功能是用鼠標移動顯示出的圖片,及放大縮小圖片,以實現圖片的簡易查看。2、程
2、序的功能框圖3、選一個或幾個算法,描述數學原理及流程圖。I隨鼠標移動的圖像在picturebox1中按下鼠標按鍵時,記錄鼠標指針的位置,flag值為真。flag值為真之后,移動鼠標指針,根據鼠標指針的位置移動picturebox1控件。松開鼠標按鍵時,設置flag值為假。II、下一張判斷選中的圖片是否有下一張。如果有,選中下一張。將下一張在picturebox1中顯示III、縮小 IV、水平百葉窗4、程序設計思路及運行顯示效果,重點說明自己的獨到設計。我做的是一個簡易的圖片查看器,可以完整地顯示圖片大小,可以上下翻動,可以用鼠標移動圖片。我用listbox1顯示所有圖片名,點擊圖片名便可以顯示
3、,可以想看哪張看哪張,過大的圖片可以用鼠標抓到自己眼前看,還可以將圖片縮小放大。還可以清空listbox1的數據,重新打開另一個文件夾的圖片。打開的圖片可以實現自動播放。 移動了點位置縮小增加了七種切換效果,隨機調用5、逐個描述在本次程序設計中所學習到的比較重要的新函數,新類。I、FolderBrowserDialog類命名空間為System.Windows.Forms,可以實現選擇文件夾的功能,并將所選擇的的文件夾路徑記錄下來。II、DirectoryInfo類DirectoryInfo(string path) 在指定的路徑中初始化 DirectoryInfo 類的新實例。string p
4、ath指要在其中創(chuàng)建 DirectoryInfo 的路徑。命名空間System.IOIII、ListBox.SetSelected() 函數選擇或清除對 ListBox 中指定項的選定,命名間:System.Windows.Forms。IV、Image.FromFile(string filename)函數從指定的文件創(chuàng)建 System.Drawing.Image。參數:filename: 字符串,包含要從中創(chuàng)建 System.Drawing.Image 的文件的名稱。 返回值:此方法創(chuàng)建的 System.Drawing.Image。V、MouseDown事件Private Sub objec
5、t_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)X 鼠標指針在圖表對象的客戶坐標系中的 X 坐標。Y 鼠標指針在圖表對象的客戶坐標系中的 Y 坐標。object 在類模塊中帶有事件聲明的 Chart 類型對象。Button 按下的鼠標按鈕。Shift 此事件產生時 Shift、Ctrl 和 Alt 的狀態(tài)??梢允窍铝兄抵换蛘吣硯讉€值的和。VI、random函數random函數返回一個0num-1之間的隨機數. random(num)是在stdlib.h中的一個宏定義
6、. num和函數返回值都是整型數.VII、Bitmap類封裝 GDI+ 位圖,此位圖由圖形圖像及其屬性的像素數據組成。Bitmap 是用于處理由像素數據定義的圖像的對象。命名空間:System.Drawing程序集:System.Drawing(在 system.drawing.dll 中)VIII、Graphics類System.Drawing.Graphics類對GDI+進行了封裝,Graphics類提供一些方法完成各種圖形的繪制。6、在短學期學習中遇到的問題(編譯錯誤/邏輯錯誤)及解決方法,你對程序進行的個性化修改1、鼠標移動圖片中,剛開始picturebox1控件的大小不變,只能圖片移
7、動。之后改了picturebox1的參數,將Size改為自動。2、由于一些代碼的功能設置有誤,無法實現預期的水平百葉和垂直效果。解決方法:把代碼this.pictureBox1.Image = bitmap; this.pictureBox1.Refresh(); System.Threading.Thread.Sleep(50);放到循環(huán)體內。3、Bitmap函數中的參數為int型,我先定義的圖片寬高是double型,因此出錯。我便將運算后的寬高強制轉換為int型,就可以實現了。二、心得、建議和意見圖片算法和書上普通的算法比,就是用了很多的新類和新函數,為了我的設計思路,查了很多的用法,心還
8、是很累。但是收獲也很多,我知道了打開文件的用法,知道了鼠標移動這個事件,以及picturebox和listbox 控件的用法。應老師的要求,加了放大和縮小圖片的功能,但是我寫的實現此過程的算法簡單,精度丟失嚴重放大時畫質不高。我明白了我的水平還不夠高,今后一定加倍學習,精益求精,寫出更加完善的作品。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;u
9、sing System.Windows.Forms;using System.IO;using System.Drawing.Drawing2D;using System.Drawing.Imaging;namespace WindowsFormsApplication1 public partial class Form1 : Form public Form1() InitializeComponent(); string FPath; /聲明變量存儲圖片路徑? public int sum; /聲明變量存儲圖片總數 string picture = new string300; /定義一
10、個數組對圖片的存儲 bool flag = false; int x, y; private void label1_Click(object sender, EventArgs e) private void listBox1_SelectedIndexChanged(object sender, EventArgs e) if (sum != 0) /點擊對其文件圖片在右側picturebox1顯示 pictureBox1.Image = Image.FromFile(this.FPath + "" + listBox1.SelectedItem); pictureBo
11、x1.Height = Image.FromFile(this.FPath + "" + listBox1.SelectedItem).Height; pictureBox1.Width = Image.FromFile(this.FPath + "" + listBox1.SelectedItem.ToString().Width; private void 打開aToolStripMenuItem_Click(object sender, EventArgs e) FolderBrowserDialog FolderBrowserDialog1 =
12、new FolderBrowserDialog(); if (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) FPath = FolderBrowserDialog1.SelectedPath; /獲取選擇的目錄 DirectoryInfo DInfo = new DirectoryInfo(FPath); /實例化Directory的對象 FileSystemInfo FSInfo = DInfo.GetFileSystemInfos(); /使用directory對象的GetFileSystemInfos方?法遍歷文件夾 for (
13、int i = 0; i < FSInfo.Length; i+) /獲取文件擴展名 string FileStyle = FSInfoi.ToString().Substring(FSInfoi.ToString().LastIndexOf(".") + 1, (FSInfoi.ToString().Length - FSInfoi.ToString().LastIndexOf(".") - 1); FileStyle = FileStyle.ToLower(); /將文件擴展名轉換成小寫 /判斷是否為指定的圖片類型 if (FileStyle
14、= "jpg" | FileStyle = "png" | FileStyle = "bmp" | FileStyle = "gif" | FileStyle = "jpeg") /將文件t名添加到listbox控件中 listBox1.Items.Add(FSInfoi.ToString(); picturei = FPath + "" + FSInfoi.ToString(); /定義的數組對文件路徑及名稱的獲取 sum = Convert.ToInt32(listBox
15、1.Items.Count.ToString(); /對打開文件的數量進行顯示 Label1.Text = "共2打䨰開a" + sum + "張?圖ª?" private void 上一張ToolStripMenuItem_Click(object sender, EventArgs e) try if (listBox1.SelectedIndex != 0) /如果所選不為null listBox1.SetSelected(listBox1.SelectedIndex - 1, true); rad();
16、 if (listBox1.SelectedIndex = listBox1.Items.Count - 1) MessageBox.Show("已經是第一張了"); catch private void 下一張ToolStripMenuItem_Click(object sender, EventArgs e) try if (listBox1.SelectedIndex < listBox1.Items.Count - 1) listBox1.SetSelected(listBox1.SelectedIndex + 1, true); rad(); if(list
17、Box1.SelectedIndex = listBox1.Items.Count - 1) MessageBox.Show ("已經是最后一張了"); catch private void pictureBox1_MouseDown(object sender, MouseEventArgs e) flag = true; x = e.X; y = e.Y; private void pictureBox1_MouseMove(object sender, MouseEventArgs e) if (flag) pictureBox1.Left = pictureBox1
18、.Left + (e.X - x); pictureBox1.Top = pictureBox1.Top + (e.Y - y); private void pictureBox1_MouseUp(object sender, MouseEventArgs e) flag = false; private void Form1_Load(object sender, EventArgs e) private void 清空ToolStripMenuItem_Click(object sender, EventArgs e) pictureBox1.Image = null; listBox1.
19、Items.Clear(); private void 縮小ToolStripMenuItem_Click(object sender, EventArgs e) double h = pictureBox1.Image.Height; double w = pictureBox1.Image.Width; w = w * 0.8; h = h * 0.8; int W = (int)w; int H = (int)h; Image NewBitmap = new Bitmap(this.pictureBox1.Image, W, H); this.pictureBox1.Image = Ne
20、wBitmap; this.pictureBox1.Height = NewBitmap.Height; this.pictureBox1.Width = NewBitmap.Width; private void 放¤?大䨮ToolStripMenuItem_Click(object sender, EventArgs e) double h = pictureBox1.Image.Height; double w = pictureBox1.Image.Width; w = w * 1.2; h = h * 1.2; int W = (int)w
21、; int H = (int)h; Image NewBitmap = new Bitmap(this.pictureBox1.Image, W, H); this.pictureBox1.Image = NewBitmap; this.pictureBox1.Height = NewBitmap.Height; this.pictureBox1.Width = NewBitmap.Width; private void rad() string aa = "1", "2", "3", "4&quo
22、t;, "5", "6", "7" ; Random rr = new Random(); string bb = aarr.Next(0, aa.Length); switch (bb) case "1": utdView(); break; case "2": rtlView(); break; case "3": lblsView(); break; case "4": ksView();
23、 break; case "5": fzView(); break; case "6": VbycView(); break; case "7": HbycView(); break; private void HbycView() /水平百葉窗方式顯示 Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); int dh = MyBitmap.Height / 30; int dw = MyBitmap.Width; Graphics g = this.pictureBox
24、1.CreateGraphics(); g.Clear(Color.Gray); Point MyPoint = new Point30; for (int y = 0; y < 30; y+) MyPointy.X = 0; MyPointy.Y = y * dh; Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height); for (int i = 0; i < dh; i+) for (int j = 0; j < 30; j+) for (int k = 0; k < dw; k+) bitmap.S
25、etPixel(MyPointj.X + k, MyPointj.Y + i, MyBitmap.GetPixel(MyPointj.X + k, MyPointj.Y + i); this.pictureBox1.Refresh(); this.pictureBox1.Image = bitmap; System.Threading.Thread.Sleep(50); private void VbycView() /垂直百葉窗顯示圖像? Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); int dw = MyBitmap.W
26、idth / 50; int dh = MyBitmap.Height; Graphics g = this.pictureBox1.CreateGraphics();/創(chuàng)建一個Graphics對象 g.Clear(Color.Gray); Point MyPoint = new Point50; for (int x = 0; x < 50; x+) MyPointx.Y = 0; MyPointx.X = x * dw; Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height); for (int i = 0; i <
27、; dw; i+) for (int j = 0; j < 50; j+) for (int k = 0; k < dh; k+) bitmap.SetPixel(MyPointj.X + i, MyPointj.Y + k, MyBitmap.GetPixel(MyPointj.X + i, MyPointj.Y + k); ¦? this.pictureBox1.Refresh(); this.pictureBox1.Image = bitmap; System.Threading.Thread.Sleep(50);/阻塞線程指定的時間? private void r
28、tlView() /從左到右的顯示 int iWidth = this.pictureBox1.Width; /圖像寬度 int iHeight = this.pictureBox1.Height; /圖像高度 /取得Graphics對象¨® Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Gray); /初始為全灰色 for (int x = 0; x <= iWidth; x = x + 2) g.DrawImage(this.pictureBox1.Image, 0, 0, x, iHe
29、ight); private void utdView() /從上到下拉伸顯示 int iWidth = this.pictureBox1.Width; int iHeight = this.pictureBox1.Height; Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Gray); for (int y = 0; y <= iHeight; y+) g.DrawImage(this.pictureBox1.Image, 0, 0, iWidth, y); private void ksView() /四
30、周擴散顯示 int iWidth = this.pictureBox1.Width; int iHeight = this.pictureBox1.Height; Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Gray); for (int x = 0; x <= iWidth / 2; x+) Rectangle DestRect = new Rectangle(iWidth / 2 - x, iHeight / 2 - x, 2 * x, 2 * x); Rectangle SrcRect = new Rectangle(0, 0, this.pictureBox1.Image.Width, this.pictureBox1.Image.Height); g.DrawImage(this.pictureBox1.Image, DestRect, SrcRect, Graphics
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超速行駛與交通安全管理培訓課件
- 肺全切除術護理常規(guī)
- 銷售助理培訓總結
- 面肌痙攣治療
- 風濕性心臟病患者的護理
- AIGC商業(yè)應用實戰(zhàn)教程 課件 6-2 AIGC商業(yè)圖像衍生應用
- 膽道殘余結石治療
- 康復行業(yè)研究報告
- 資產相關業(yè)務培訓
- 零售商業(yè)環(huán)境分析表格
- 社交媒體對消費者行為的影響調研報告
- 人防工程管理制度范本(三篇)
- GB/T 15822.1-2024無損檢測磁粉檢測第1部分:總則
- 計算機一級考試WPS試題及答案
- 快樂讀書吧《孤獨的小螃蟹》整本書閱讀指導課教學設計-2023-2024學年語文二年級上冊統(tǒng)編版
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題庫及答案
- 五、完成課題的可行性分析
- 全科醫(yī)生題庫附有答案
- DL∕T 5765-2018 20kV及以下配電網工程工程量清單計價規(guī)范
- 2024年衡水市安平縣小升初數學高頻考點檢測卷含解析
- Unit2 Special days 單元整體教學設計(1.2) 人教版新起點(一年級起點)五年級下冊
評論
0/150
提交評論