说明:
由于是以动画方式显示图像,这里没办法直接贴静态截图,因此决定给园友开源,将所有的可运行代码附在案例后面,由于所有的动画处理图像的对象放在都 pictureBox控件中,同时定义的类都大同小异,因此这里先把下面案例中要用到的所有类及装载图像的代码给大家,运行时用这里的代码加下面任意一个实例的代码即可运行程序!
- privateBitmapSourceBitmap;
- privateBitmapMyBitmap;
- privatevoidbutton2_Click(objectsender,EventArgse)
- {
- //打开图像文件
- OpenFileDialogopenFileDialog=newOpenFileDialog();
- openFileDialog.Filter="图像文件(JPeg,Gif,Bmp,etc.)
- |*.jpg;*.jpeg;*.gif;*.bmp;*.tif;*.tiff;*.png|
- JPeg图像文件(*.jpg;*.jpeg)
- |*.jpg;*.jpeg|GIF图像文件(*.gif)|*.gif|BMP图像文件(*.bmp)|*.bmp
- |Tiff图像文件(*.tif;*.tiff)|*.tif;*.tiff|Png图像
- 文件(*.png)|*.png|所有文件(*.*)|*.*";
- if(openFileDialog.ShowDialog()==DialogResult.OK)
- {
- //得到原始大小的图像
- SourceBitmap=newBitmap(openFileDialog.FileName);
- //得到缩放后的图像
- MyBitmap=newBitmap(SourceBitmap,this.pictureBox1.Width,this
- .pictureBox1.Height);
- this.pictureBox1.Image=MyBitmap;
- }
- }
一、以上下反转的方式实现C#显示图像.
原理:计算图像位置和高度后以高度的一半为轴进行对换上下半边的图像。
代码:
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- try
- {
- intwidth=this.MyBitmap.Width;//图像宽度
- intheight=this.MyBitmap.Height;//图像高度
- Graphicsg=this.panel1.CreateGraphics();
- g.Clear(Color.Gray);
- for(inti=-width/2;i<=width/2;i++)
- {
- g.Clear(Color.Gray);
- intj=Convert.ToInt32(i*(Convert.ToSingle(height)/Convert.ToS
- ingle(width)));
- RectangleDestRect=newRectangle(0,height/2-j,width,2*j);
- RectangleSrcRect=newRectangle(0,0,MyBitmap.Width,MyBitmap.Height);
- g.DrawImage(MyBitmap,DestRect,SrcRect,GraphicsUnit.Pixel);
- System.Threading.Thread.Sleep(10);
- }
- }
- catch(Exceptionex)
- {
- MessageBox.Show(ex.Message,"信息提示");
- }
- }
二、以上下对接的方式实现C#显示图像
原理:首先将图像分为上下两部分, 然后分别显示。
代码:
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- try
- {
- intwidth=this.pictureBox1.Width;//图像宽度
- intheight=this.pictureBox1.Height;//图像高度
- Graphicsg=this.panel1.CreateGraphics();
- g.Clear(Color.Gray);
- Bitmapbitmap=newBitmap(width,height);
- intx=0;
- while(x<=height/2)
- {
- for(inti=0;i<=width-1;i++)
- {
- bitmap.SetPixel(i,x,MyBitmap.GetPixel(i,x));
- }
- for(inti=0;i<=width-1;i++)
- {
- bitmap.SetPixel(i,height-x-1,MyBitmap.GetPixel(i,height-x-1));
- }
- x++;
- this.panel1.Refresh();
- g.DrawImage(bitmap,0,0);
- System.Threading.Thread.Sleep(10);
- }
- }
- catch(Exceptionex)
- {
- MessageBox.Show(ex.Message,"信息提示");
- }
- }
三、以四周扩散的方式显示图像
原理:首先设置图像显示的位置, 然后按高度和宽度的比例循环输出, 直到高度和宽度为原始大小。
代码:
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- try
- {
- intwidth=this.MyBitmap.Width;//图像宽度
- intheight=this.MyBitmap.Height;//图像高度
- //取得Graphics对象
- Graphicsg=this.panel1.CreateGraphics();
- g.Clear(Color.Gray);//初始为全灰色
- for(inti=0;i<=width/2;i++)
- {
- intj=Convert.ToInt32(i*(Convert.ToSingle(height)/Convert.ToSingle(width)));
- RectangleDestRect=newRectangle(width/2-i,height/2-j,2*i,2*j);
- RectangleSrcRect=newRectangle(0,0,MyBitmap.Width,MyBitmap.Height);
- g.DrawImage(MyBitmap,DestRect,SrcRect,GraphicsUnit.Pixel);
- System.Threading.Thread.Sleep(10);
- }
- }
- catch(Exceptionex)
- {
- MessageBox.Show(ex.Message,"信息提示");
- }
- }
【编辑推荐】