C#开发图片处理程序.docx
《C#开发图片处理程序.docx》由会员分享,可在线阅读,更多相关《C#开发图片处理程序.docx(13页珍藏版)》请在冰豆网上搜索。
C#开发图片处理程序
C#开发图片处理程序
一.概述......................................3
1.1背景....................................3
1.2开发与运行环境..........................3
二.需求分析..................................4
三.系统设计..................................4
四.详细设计..................................5
4.1界面设计................................5
4.2代码设计................................7
五.结束语...................................11
一、概述
1.1背景
由于对于现在使用电脑的大部份用户来说,在进行图片查看浏览的时候都会用到图片管理器,而对于图片的处理大部份也都是一些具有专业图片处理知识的人才会做的。
对于一些特别的观看效果来说,我们用一些专业的看图软件是高射炮打蚊子,仅仅为了看图而用这样一些软件是不合算的,我们必须花费一些时间去学习这些软件,因为越是功能强大的软件,往往使用起来越复杂。
这是一个很现实的规律。
对于一般的用户来说,他们说不定连这个软件都不知道。
现在的图片处理和浏览的软件,要不就是专门对图片处理的软件,要不只能对图片平面进行浏览的。
很少具有同时两样都具有而且还是一些即简单又实用的软件来对图片进行浏览处理。
目前常用的专门对于图片的处理软件有Adobepshotoshop,Firework。
而对于对于图片
浏览,最常用的就是Windows自带的Windows图片浏览器了,还有就是ACDsee图片浏览器。
Windows图片浏览器和ACDsee图片浏览器呢,前者功能:
图片浏览,查看,而且还可以查看传真,对图片进行放大缩小查看,进行复制,删除。
打印。
ACDsee功能:
不但具有前者的功能,而且附加了许多的功能,如:
图片的获取、管理、浏览、优化甚至和他人的分享!
使用ACDsee,你可以从数码相机和扫描仪高效获取图片,并进行便捷的查找、组织和预览。
图片编辑工具,轻松处理数码影像等等,还能进行批量处理。
对于这几款软件的各有不同的功能和不足综合分析如下:
●Adobephotoshop,Firework,这两款软件是专门的对图片的处理,而不对图片进行浏览,虽说可以用来浏览图片,但是用起来比较单一,也就是比较麻烦,比较单一的查看一张图片而已。
●Windows图片浏览器和ACDsee图片浏览器:
前者呢只有简单的功能,而后者虽说功能来说就特别的多了,但是这些功能都比较复杂,而且比较专业,对于大部分非计算机专业的用户来说根部就不知道怎么用,也不知道那些功能的专业术语的意思,也就谈不上用了。
而对于这些功能的发挥也只有对于那些专业的数码照片处理的人来说就再好不过了。
只不过对于普通的电脑用户来说,显得大材小用了些。
1.2开发与运行环境
图片管理器的开发与运行环境如下:
开发环境:
Windows7
开发工具:
MicrosoftVisualstudio2008C#
硬件环境:
CPU:
2.6GHz、内存:
2G、硬盘:
320G
运行环境:
Windows7
二、需求分析
本软件为一个简单而且很实用的动态图片查看的工具,不但可以进行图片的一些简单查看,浏览操作,处理,而且还可以进行幻灯片的自动播放等功能,是一款比较适合广大普通用户和非计算机专业的用户的图片查看处理软件,本软件不但界面友好,功能齐全,而且操作简单。
是款比较容易操作,实用的图片管理软件。
我们从用户角度,把软件功能的实现变得简单,易于操作。
对于一个简单的看图软件来说,首要的功能就是要能流畅地以各种方式,浏览不同格式的图片。
其次,要能够简单地对图片进行调整,使其有更好的效果。
在第一部分背景中,我们已经分析了现在常用的两款看图、做图软件Adobephotoshop,Firework的优势和不足,我们做的小软件当然不能跟这些大公司的软件相比,但是我们也有自己的特点,它操作简便,界面清新,方便地实现了用户所需要的一些功能。
在这款软件中我们可以以浮雕、反色、锐化、柔化等各种状态来对图片进行浏览,还可以在图片框中以居中、满图片框和自动大小来进行浏览。
如果想让它自动播放,可以进入幻灯片模式进行自动播放。
这个软件还有一些对图片进行调整的小功能,方便用户使用,在亮度和对比度方面处理好了以后还可以对图片进行保存。
三、系统设计
根据系统功能分析,经过模块化的分析得到如下图所示的系统功能模块结构图。
四、
详细设计
4.1界面设计
1、图片管理器主界面如下图:
2、图片幻灯片播放界面如下图:
2、图片播放界面如下图:
4.2代码设计
1、图片打开、保存及打印:
a.打开图片
privatevoid打开图片ToolStripMenuItem_Click(objectsender,EventArgse)
{
openFileDialog1.Filter="*.jpg,*.jpeg,*.bmp;*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
openFileDialog1.ShowDialog();
fpath=openFileDialog1.FileName;
pictureBox1.Image=Image.FromFile(fpath);
image1=newBitmap(fpath);
picturewidth=image1.Width.ToString();
pictureheight=image1.Height.ToString();
toolStripStatusLabel2.Text="图片名为:
"+fpath+"宽度:
"+picturewidth+"高度:
"+pictureheight;
}
b.保存图片
privatevoid保存图片ToolStripMenuItem_Click(objectsender,EventArgse)
{
try
{
saveFileDialog1.Filter="BMP|*.bmp|JPEG|*.jpeg|GIF|*.gif|PNG|*.png";
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
stringpicpath=saveFileDialog1.FileName;//保存文件的路径及文件名
stringpictype=picpath.Substring(picpath.LastIndexOf(".")
+1,(picpath.Length-picpath.LastIndexOf(".")-1));
switch(pictype)//利用switch条件语句实现图片类型的转换
{
case"bmp":
Bitmapbt=newBitmap(fpath);
bt.Save(picpath,ImageFormat.Bmp);break;
case"jpeg":
Bitmapbt1=newBitmap(fpath);
bt1.Save(picpath,ImageFormat.Jpeg);break;
case"gif":
Bitmapbt2=newBitmap(fpath);
bt2.Save(picpath,ImageFormat.Gif);break;
case"png":
Bitmapbt3=newBitmap(fpath);
bt3.Save(picpath,ImageFormat.Png);break;
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
c..打印图片
privatevoid打印ToolStripMenuItem_Click(objectsender,EventArgse)
{
printPreviewDialog1.Document=printDocument1;
printPreviewDialog1.ShowDialog();
}
privatevoidprintDocument1_PrintPage(objectsender,System.Drawing.Printing.PrintPageEventArgse)
{
intprintWidth=printDocument1.DefaultPageSettings.PaperSize.Width;
//打印纸张的宽度和高度
intprintHeight=printDocument1.DefaultPageSettings.PaperSize.Height;
if(Convert.ToInt32(picturewidth)<=printWidth)
//如果图片的宽度小于纸张的宽度,则显示在中间
{
floatx=(printWidth-Convert.ToInt32(picturewidth))/2;
floaty=(printHeight-Convert.ToInt32(pictureheight))/2;
e.Graphics.DrawImage(Image.FromFile(fpath),x,y,Convert.ToInt32(picturewidth),Convert.ToInt32(pictureheight));
}
else
{
if(Convert.ToInt32(picturewidth)>Convert.ToInt32(pictureheight))
{//如果图片的宽度大于纸张的宽度
Bitmapbitmap=(Bitmap)Bitmap.FromFile(fpath);
bitmap.RotateFlip(RotateFlipType.Rotate90FlipXY);//旋转90度显示
PictureBoxpb=newPictureBox();
pb.Image=bitmap;
Singlea=printWidth/Convert.ToSingle(pictureheight);
e.Graphics.DrawImage(pb.Image,0,0,Convert.ToSingle(pictureheight)*a,Convert.ToSingle(picturewidth)*a);
}
else
{
Singlea=printWidth/Convert.ToSingle(picturewidth);
e.Graphics.DrawImage(Image.FromFile(fpath),0,0,Convert.ToSingle(picturewidth)*a,Convert.ToSingle(pictureheight)*a);
}
}
2、图片调整:
以亮度调整为例
privatevoidtrackBar1_Scroll(objectsender,EventArgse)
{
Bitmapb=newBitmap(ig);
Bitmapbp=KiLighten(b,trackBar1.Value);//调用KiLighten
pictureBox1.Image=bp;
}
publicstaticBitmapKiLighten(Bitmapb,intdegree)
{
if(b==null)
{
returnnull;
}
if(degree<-255)degree=-255;
if(degree>255)degree=255;
try
{
intwidth=b.Width;
intheight=b.Height;
intpix=0;
BitmapDatadata=b.LockBits(newRectangle(0,0,width,height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
unsafe
{
byte*p=(byte*)data.Scan0;
intoffset=data.Stride-width*3;
for(inty=0;y{
for(intx=0;x{
for(inti=0;i<3;i++)
{
pix=p[i]+degree;
if(degree<0)p[i]=(byte)Math.Max(0,pix);
if(degree>0)p[i]=(byte)Math.Min(255,pix);
}
p+=3;
}
p+=offset;
}
}
b.UnlockBits(data);
returnb;
}
catch
{
returnnull;
}
}
3、图片幻灯片放映:
privatevoidtimer1_Tick(objectsender,EventArgse)
{
GetPic();
i++;
}
privatevoidGetPic()
{
if(i{
stringFileType=FSInfo[i].ToString().Substring(FSInfo[i].ToString().LastIndexOf(".")+1,(FSInfo[i].ToString().Length-FSInfo[i].ToString().LastIndexOf(".")-1));
//获取文件类型
FileType=FileType.ToLower();//转换为小写
if(FileType=="jpg"||FileType=="png"||FileType=="bmp"||FileType=="gif"||FileType=="jpeg")
{
pictureBox1.Image=Image.FromFile(FilePath+FSInfo[i].ToString());
}
}
}
4、图片播放效果:
以反色效果为例
privatevoid反色效果ToolStripMenuItem_Click(objectsender,EventArgse)
{
if(this.pictureBox1.Image!
=null)
{
intHeight=this.pictureBox1.Image.Height;
intWidth=this.pictureBox1.Image.Width;
Bitmapbitmap=newBitmap(Width,Height);
BitmapMyBitmap=(Bitmap)this.pictureBox1.Image;
Colorpixel;
for(intx=1;x{
for(inty=1;y{
intr,g,b;
pixel=MyBitmap.GetPixel(x,y);
r=255-pixel.R;
g=255-pixel.G;
b=255-pixel.B;
bitmap.SetPixel(x,y,Color.FromArgb(r,g,b));
}
}
this.pictureBox1.Image=bitmap;
toolStripStatusLabel2.Text="图片播放效果:
反色效果";
}
else
toolStripStatusLabel2.Text="请打开图片!
";
}