GDI专题----C#制作以动画的方式显示图像_第1页
GDI专题----C#制作以动画的方式显示图像_第2页
GDI专题----C#制作以动画的方式显示图像_第3页
GDI专题----C#制作以动画的方式显示图像_第4页
GDI专题----C#制作以动画的方式显示图像_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、GDI+专题-C# 制作以动画的方式显示图像(一十一将至,放假前将GDI+最后一部分今天终于完成:以动画的方式显示图像。希望对 GDI+编程的园友有所帮助。PPT 以动画方式显示幻灯片是其一个很重要的特点,相信里边一定有您喜欢的动画方式,今天我就带大家认识几款以动画方式显示幻灯片的制作方法,由于是GDI+编程,这里以图像代替幻灯片(其实原理是相通的来演示如何制作以动画方式显示图像。说明:由于是以动画方式显示图像,这里没办法直接贴静态截图,因此决定给园友开源,将所有的可运行代码附在案例后面,由于所有的动画处理图像的对象放在都pictureBox控件中,同时定义的类都大同小异,因此这里先把下面案例

2、中要用到的所有类及装载图像的代码给大家,运行时用这里的代码加下面任意一个实例的代码即可运行程序!同时楼主保证每个案例代码都编译通过,绝不忽悠!private Bitmap SourceBitmap;private Bitmap MyBitmap;private void button2_Click(object sender, EventArgs e/打开图像文件OpenFileDialog openFileDialog = new OpenFileDialog(;openFileDialog.Filter = "图像文件(JPeg, Gif, Bmp, etc.|*.jpg;*.j

3、peg;*.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 = new Bitmap(openFileDialog.FileName

4、;/得到缩放后的图像MyBitmap = new Bitmap(SourceBitmap, this.pictureBox1.Width, this.pictureBox1.Height; this.pictureBox1.Image = MyBitmap;一. 以上下反转的方式显示图像.原理: 计算图像位置和高度后以高度的一半为轴进行对换上下半边的图像.代码:private void button1_Click(object sender, EventArgs etryint width = this.MyBitmap.Width; /图像宽度int height = this.MyBitm

5、ap.Height; /图像高度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray;for (int i = -width / 2; i <= width / 2; i+g.Clear(Color.Gray;int j = Convert.ToInt32(i * (Convert.ToSingle(height / Convert.ToSingle(width; Rectangle DestRect = new Rectangle(0, height / 2 -j, width, 2 * j;Rectangle SrcR

6、ect = new Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height;g.DrawImage(MyBitmap, DestRect, SrcRect, GraphicsUnit.Pixel;System.Threading.Thread.Sleep(10;catch (Exception exMessageBox.Show(ex.Message, "信息提示"二. 以上下对接的方式显示图像原理: 首先将图像分为上下两部分, 然后分别显示.代码:private void button1_Click(object sender, E

7、ventArgs etryint width = this.pictureBox1.Width; /图像宽度int height = this.pictureBox1.Height; /图像高度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray;Bitmap bitmap = new Bitmap(width, height;int x = 0;while (x <= height / 2for (int i = 0; i <= width - 1; i+bitmap.SetPixel(i, x, MyBitmap

8、.GetPixel(i, x;for (int i = 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 (Exception exMessageBox.Show(ex.Message, "信息提示"三. 以四周扩散的方式显示图像原理: 首先设置图像显示的位置,

9、然后按高度和宽度的比例循环输出, 直到高度和宽度为原始大小.代码:private void button1_Click(object sender, EventArgs etryint width = this.MyBitmap.Width; /图像宽度int height = this.MyBitmap.Height; /图像高度/取得Graphics对象Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray; /初始为全灰色for (int i = 0; i <= width / 2; i+int j = Convert

10、.ToInt32 (i*(Convert.ToSingle(height / Convert.ToSingle(width;Rectangle DestRect = new Rectangle(width / 2 - i, height/2-j, 2 * i, 2*j;Rectangle SrcRect = new Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height;g.DrawImage(MyBitmap, DestRect, SrcRect, GraphicsUnit.Pixel;System.Threading.Thread.Sleep(10;

11、catch (Exception exMessageBox.Show(ex.Message, "信息提示"四. 以分块效果显示图像原理: 首先将图分为几块, 再使用 Bitmap 类的 Clone方法从原图指定的块中复制图像, 最后将这些块依次显示出来便可代码:private void button1_Click(object sender, EventArgs eGraphics g = this.panel1.CreateGraphics(;g.Clear(Color.White;int width = MyBitmap.Width;int height = MyBit

12、map.Height;/定义将图片切分成四个部分的区域RectangleF block =new RectangleF(0,0,width/2,height/2,new RectangleF(width/2,0,width/2,height/2,new RectangleF(0,height/2,width/2,height/2,new RectangleF(width/2,height/2,width/2,height/2;/分别克隆图片的四个部分Bitmap MyBitmapBlack =MyBitmap.Clone(block0,System.Drawing.Imaging.PixelF

13、ormat.DontCare,MyBitmap.Clone(block1,System.Drawing.Imaging.PixelFormat.DontCare,MyBitmap.Clone(block2,System.Drawing.Imaging.PixelFormat.DontCare,MyBitmap.Clone(block3,System.Drawing.Imaging.PixelFormat.DontCare;/绘制图片的四个部分,各部分绘制时间间隔为0.5秒g.DrawImage(MyBitmapBlack0, 0, 0;System.Threading.Thread.Sleep

14、(1000;g.DrawImage(MyBitmapBlack1, width / 2, 0;System.Threading.Thread.Sleep(1000;g.DrawImage(MyBitmapBlack3, width / 2, height / 2;System.Threading.Thread.Sleep(1000;g.DrawImage(MyBitmapBlack2, 0, height / 2;五. 以淡入淡出效果显示图像原理: 使用 ImageAttrributes 类的 SetColorMatrix( 方法设置颜色, 调整矩阵实现淡出的效果. 此类还可以对颜色进行校正,

15、 调暗, 调亮和移除等.代码:private void button1_Click(object sender, EventArgs e tryGraphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray;int width = MyBitmap.Width;int height = MyBitmap.Height;ImageAttributes attributes = new ImageAttributes(;ColorMatrix matrix = new ColorMatrix(;/创建淡入颜色矩阵matrix.Matrix00

16、 = (float0.0;matrix.Matrix01 = (float0.0;matrix.Matrix02 = (float0.0;matrix.Matrix03 = (float0.0;matrix.Matrix04 = (float0.0;matrix.Matrix10 = (float0.0;matrix.Matrix11 = (float0.0;matrix.Matrix12 = (float0.0;matrix.Matrix13 = (float0.0;matrix.Matrix14 = (float0.0;matrix.Matrix20 = (float0.0;matrix.

17、Matrix21 = (float0.0;matrix.Matrix22 = (float0.0;matrix.Matrix23 = (float0.0;matrix.Matrix24 = (float0.0;matrix.Matrix30 = (float0.0;matrix.Matrix31 = (float0.0;matrix.Matrix32 = (float0.0;matrix.Matrix33 = (float0.0;matrix.Matrix34 = (float0.0;matrix.Matrix40 = (float0.0;matrix.Matrix41 = (float0.0

18、;matrix.Matrix42 = (float0.0;matrix.Matrix43 = (float0.0;matrix.Matrix44 = (float0.0;matrix.Matrix33 = (float1.0;matrix.Matrix44 = (float1.0;/从0到1进行修改色彩变换矩阵主对角线上的数值/使三种基准色的饱和度渐增Single count = (float0.0;while (count < 1.0matrix.Matrix00 = count;matrix.Matrix11 = count;matrix.Matrix22 = count;matri

19、x.Matrix33 = count;attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap;g.DrawImage(MyBitmap, new Rectangle(0, 0, width, height,0, 0, width, height, GraphicsUnit.Pixel, attributes;分页标题System.Threading.Thread.Sleep(200;count = (float(count + 0.02;catch (Exception exMessag

20、eBox.Show(ex.Message, "信息提示"private void button3_Click(object sender, EventArgs e tryGraphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray;int width = MyBitmap.Width;int height = MyBitmap.Height;ImageAttributes attributes = new ImageAttributes(;ColorMatrix matrix = new ColorMatrix(;/

21、创建淡出颜色矩阵matrix.Matrix00 = (float0.0;matrix.Matrix01 = (float0.0;matrix.Matrix02 = (float0.0;matrix.Matrix03 = (float0.0;matrix.Matrix04 = (float0.0;matrix.Matrix10 = (float0.0;matrix.Matrix11 = (float0.0;matrix.Matrix12 = (float0.0;matrix.Matrix13 = (float0.0;matrix.Matrix14 = (float0.0;matrix.Matri

22、x20 = (float0.0;matrix.Matrix21 = (float0.0;matrix.Matrix22 = (float0.0;matrix.Matrix23 = (float0.0;matrix.Matrix24 = (float0.0;matrix.Matrix30 = (float0.0;matrix.Matrix31 = (float0.0;matrix.Matrix32 = (float0.0;matrix.Matrix33 = (float0.0;matrix.Matrix34 = (float0.0;matrix.Matrix40 = (float0.0;matr

23、ix.Matrix41 = (float0.0;matrix.Matrix42 = (float0.0;matrix.Matrix43 = (float0.0;matrix.Matrix44 = (float0.0;matrix.Matrix33 = (float1.0;matrix.Matrix44 = (float1.0;/从1到0进行修改色彩变换矩阵主对角线上的数值/依次减少每种色彩分量Single count = (float1.0;while (count > 0.0matrix.Matrix00 = (floatcount;matrix.Matrix11 = (floatco

24、unt;matrix.Matrix22 = (floatcount;matrix.Matrix33 = (floatcount;attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap;g.DrawImage(MyBitmap, new Rectangle(0, 0, width, height,0, 0, width, height, GraphicsUnit.Pixel, attributes; System.Threading.Thread.Sleep(20;count = (flo

25、at(count - 0.01;catch (Exception exMessageBox.Show(ex.Message, "信息提示"六. 以左右对接的方式显示图像原理: 首先将图像分为左右两部分, 然后分别显示.代码:private void button1_Click(object sender, EventArgs e /以左右对接方式显示图像tryint width = this.MyBitmap.Width; /图像宽度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray; /初始为全灰色Bit

26、map bitmap = new Bitmap(width, height;int x = 0;while (x <= width / 2for (int i = 0; i <= height - 1; i+bitmap.SetPixel(x, i, MyBitmap.GetPixel(x, i; for (int i = 0; i <= height - 1; i+bitmap.SetPixel(width - x - 1, i,MyBitmap.GetPixel(width - x - 1, i;x+;this.panel1.Refresh(;g.DrawImage (b

27、itmap,0,0;System.Threading.Thread.Sleep(10;catch (Exception exMessageBox.Show(ex.Message, "信息提示"七. 以左右反转的方式显示图像原理: 计算图像位置和高度后以宽度的一半为轴进行对换左右半边的图像.代码:private void button1_Click(object sender, EventArgs e/以左右反转方式显示图像tryint width = this.MyBitmap.Width; /图像宽度int height = this.MyBitmap.Height; /

28、图像高度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray; /初始为全灰色for (int j = -height / 2; j <= height / 2; j+g.Clear(Color.Gray; /初始为全灰色int i = Convert.ToInt32(j * (Convert.ToSingle(width / Convert.ToSingle(height; Rectangle DestRect = new Rectangle(width / 2 - i, 0, 2 * i, height;Rectang

29、le SrcRect = new Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height;g.DrawImage(MyBitmap, DestRect, SrcRect, GraphicsUnit.Pixel;System.Threading.Thread.Sleep(10;分页标题catch (Exception exMessageBox.Show(ex.Message, "信息提示"八. 以从上向下拉伸的方式显示图像原理: 将图像的宽度不变每次显示图像的一部分, 直到将图片完全显示. 代码:private void button1

30、_Click(object sender, EventArgs e/以从上向下拉伸方式显示图像tryint width = this.MyBitmap.Width; /图像宽度int height = this.MyBitmap.Height; /图像高度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray; /初始为全灰色for (int y = 1; y <= height; y+Bitmap bitmap=MyBitmap.Clone (new Rectangle(0,0,width ,y,System.Drawin

31、g .Imaging.PixelFormat .Format24bppRgb ;g.DrawImage (bitmap,0,0;System.Threading.Thread.Sleep(10;catch (Exception exMessageBox.Show(ex.Message, "信息提示"九. 以从左向右拉伸的方式显示图像原理: 将图像的高度不变每次显示图像的一部分, 直到将图片完全显示代码:private void button1_Click(object sender, EventArgs e/以从左向右拉伸方式显示图像tryint width = this.

32、MyBitmap.Width; /图像宽度int height = this.MyBitmap.Height; /图像高度Graphics g = this.panel1.CreateGraphics(;g.Clear(Color.Gray; /初始为全灰色 for (int x = 1; x <= width; x+Bitmap bitmap=MyBitmap.Clone (new Rectangle(0,0,x ,height,System.Drawing .Imaging.PixelFormat .Format24bppRgb ;g.DrawImage (bitmap,0,0;Sy

33、stem.Threading.Thread.Sleep(10;catch (Exception exMessageBox.Show(ex.Message, "信息提示"十. 以任意角度旋转图像原理: 主要使用了 Graphics 类提供的 RotateTransform( 方法对图像进行旋转.代码:private void button1_Click(object sender, EventArgs e/以任意角度旋转显示图像Graphics g = this.panel1.CreateGraphics(;float MyAngle = 0;/旋转的角度while (MyA

34、ngle < 360TextureBrush MyBrush = new TextureBrush(MyBitmap;this.panel1.Refresh(;MyBrush.RotateTransform(MyAngle;g.FillRectangle(MyBrush, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height; MyAngle += 0.5f;System.Threading.Thread.Sleep(50;十一. 以椭圆的方式显示图像原理: 主要使用了 Graphics 类提供的 FillEllips

35、e( 方法和 TextureBrush( 方法.代码:private void button1_Click(object sender, EventArgs e/椭圆显示图像Graphics g = this.panel1.CreateGraphics(;TextureBrush MyBrush = new TextureBrush(MyBitmap;g.FillEllipse(MyBrush, this.panel1.ClientRectangle;十二. 以不同的透明度显示图像.原理: Graphics 类的 FromArgb( 方法代码:private void button1_Clic

36、k(object sender, EventArgs e/以不同的透明度显示图像Graphics g = this.panel1.CreateGraphics(;g.SmoothingMode = SmoothingMode.AntiAlias;TextureBrush MyBrush = new TextureBrush(MyBitmap;g.FillRectangle(MyBrush, this.panel1.ClientRectangle;for (int i = 0; i < 255; i+/由透明变为不透明g.FillRectangle(new SolidBrush(Color

37、.FromArgb(i,Color.DarkSlateGray, this.panel1.ClientRectangle;System.Threading.Thread.Sleep(100;十三. 以不同分辨率显示图像原理: Bitmap 类的 SetResolution 方法代码:private void button1_Click(object sender, EventArgs e/以不同的分辨率显示图像for (int i = 10; i < this.panel1.Height; i += 2g.Clear(Color.Gray;MyBitmap.SetResolution(i, i;g.DrawImage(MyBitmap, 0, 0;System.Threading.Thread.Sleep(100;十四. 以不同翻转方式显示图像.原理: Bitmap 类的 RotateFip(方法代码:private void button1_Click(object sender, EventArgs e /以不同翻转方式显示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论