C#制作的简易图片查看器_第1页
C#制作的简易图片查看器_第2页
C#制作的简易图片查看器_第3页
C#制作的简易图片查看器_第4页
C#制作的简易图片查看器_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中级程序设计报告给自己打分:80自我评价:我做了一个简易的图片查看器,可以打开一个文件夹的图片查看,能实现一些简单的上一张下一张,能七种切换效果随机调用,能放大缩小,能用鼠标移动图片,还可以将listbox1里的图片自动播放。一、大作业内容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指要在其中创建 DirectoryInfo 的路径。命名空间System.IOIII、ListBox.SetSelected() 函数选择或清除对 ListBox 中指定项的选定,命名间:System.Windows.Forms。IV、Image.FromFile(string filename)函数从指定的文件创建 System.Drawing.Image。参数:filename: 字符串,包含要从中创建 System.Drawing.Image 的文件的名称。 返回值:此方法创建的 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 的状态。可以是下列值之一或者某几个值的和。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);放到循环体内。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();/创建一个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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论