Winform下实现图片切换特效的方法
2023-06-13 09:15:44 时间
本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能。分享给大家供大家参考之用。具体方法如下:
本实例源自网络,功能较为齐全、丰富!主要功能代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Drawing.Text; usingSystem.Drawing.Drawing2D; usingSystem.Drawing.Imaging; usingSystem.Windows.Forms; namespaceMengYu.Image { publicclassImageClass { ///<summary> ///将图片转换成黑白色效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidHeiBaiSeImage(Bitmapbmp,PictureBoxpicBox) { //以黑白效果显示图像 BitmapoldBitmap; BitmapnewBitmap=null; try { intHeight=bmp.Height; intWidth=bmp.Width; newBitmap=newBitmap(Width,Height); oldBitmap=bmp; Colorpixel; for(intx=0;x<Width;x++) for(inty=0;y<Height;y++) { pixel=oldBitmap.GetPixel(x,y); intr,g,b,Result=0; r=pixel.R; g=pixel.G; b=pixel.B; //实例程序以加权平均值法产生黑白图像 intiType=2; switch(iType) { case0://平均值法 Result=((r+g+b)/3); break; case1://最大值法 Result=r>g?r:g; Result=Result>b?Result:b; break; case2://加权平均值法 Result=((int)(0.7*r)+(int)(0.2*g)+(int)(0.1*b)); break; } newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result)); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } picBox.Image=newBitmap; } ///<summary> ///雾化效果 ///</summary> ///<paramname="bmp"></param> ///<paramname="picBox"></param> publicstaticvoidWuHuaImage(Bitmapbmp,PictureBoxpicBox) { //雾化效果 BitmapoldBitmap; BitmapnewBitmap=null; try { intHeight=bmp.Height; intWidth=bmp.Width; newBitmap=newBitmap(Width,Height); oldBitmap=bmp; Colorpixel; for(intx=1;x<Width-1;x++) for(inty=1;y<Height-1;y++) { System.RandomMyRandom=newRandom(); intk=MyRandom.Next(123456); //像素块大小 intdx=x+k%19; intdy=y+k%19; if(dx>=Width) dx=Width-1; if(dy>=Height) dy=Height-1; pixel=oldBitmap.GetPixel(dx,dy); newBitmap.SetPixel(x,y,pixel); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } picBox.Image=newBitmap; } ///<summary> ///锐化效果 ///</summary> ///<paramname="bmp"></param> ///<paramname="picBox"></param> publicstaticvoidRuiHuaImage(Bitmapbmp,PictureBoxpicBox) { BitmapoldBitmap; BitmapnewBitmap=null; try { intHeight=bmp.Height; intWidth=bmp.Width; newBitmap=newBitmap(Width,Height); oldBitmap=bmp; Colorpixel; //拉普拉斯模板 int[]Laplacian={-1,-1,-1,-1,9,-1,-1,-1,-1}; for(intx=1;x<Width-1;x++) for(inty=1;y<Height-1;y++) { intr=0,g=0,b=0; intIndex=0; for(intcol=-1;col<=1;col++) for(introw=-1;row<=1;row++) { pixel=oldBitmap.GetPixel(x+row,y+col);r+=pixel.R*Laplacian[Index]; g+=pixel.G*Laplacian[Index]; b+=pixel.B*Laplacian[Index]; Index++; } //处理颜色值溢出 r=r>255?255:r; r=r<0?0:r; g=g>255?255:g; g=g<0?0:g; b=b>255?255:b; b=b<0?0:b; newBitmap.SetPixel(x-1,y-1,Color.FromArgb(r,g,b)); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } picBox.Image=newBitmap; } ///<summary> ///底片效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidDiPianImage(Bitmapbmp,PictureBoxpicBox) { BitmapoldBitmap; BitmapnewBitmap=null; try { intHeight=bmp.Height; intWidth=bmp.Width; newBitmap=newBitmap(Width,Height); oldBitmap=bmp; Colorpixel; for(intx=1;x<Width;x++) { for(inty=1;y<Height;y++) { intr,g,b; pixel=oldBitmap.GetPixel(x,y); r=255-pixel.R; g=255-pixel.G; b=255-pixel.B; newBitmap.SetPixel(x,y,Color.FromArgb(r,g,b)); } } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } picBox.Image=newBitmap; } ///<summary> ///浮雕效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidFuDiaoImage(Bitmapbmp,PictureBoxpicBox) { BitmapoldBitmap; BitmapnewBitmap=null; try { intHeight=bmp.Height; intWidth=bmp.Width; newBitmap=newBitmap(Width,Height); oldBitmap=bmp; Colorpixel1,pixel2; for(intx=0;x<Width-1;x++) { for(inty=0;y<Height-1;y++) { intr=0,g=0,b=0; pixel1=oldBitmap.GetPixel(x,y); pixel2=oldBitmap.GetPixel(x+1,y+1); r=Math.Abs(pixel1.R-pixel2.R+128); g=Math.Abs(pixel1.G-pixel2.G+128); b=Math.Abs(pixel1.B-pixel2.B+128); if(r>255) r=255; if(r<0) r=0; if(g>255) g=255; if(g<0) g=0; if(b>255) b=255; if(b<0) b=0; newBitmap.SetPixel(x,y,Color.FromArgb(r,g,b)); } } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } picBox.Image=newBitmap; } ///<summary> ///日光照射效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidRiGuangZhaoSheImage(Bitmapbmp,PictureBoxpicBox) { //以光照效果显示图像 GraphicsMyGraphics=picBox.CreateGraphics(); MyGraphics.Clear(Color.White); BitmapMyBmp=newBitmap(bmp,bmp.Width,bmp.Height); intMyWidth=MyBmp.Width; intMyHeight=MyBmp.Height; BitmapMyImage=MyBmp.Clone(newRectangleF(0,0,MyWidth,MyHeight),System.Drawing.Imaging.PixelFormat.DontCare); intA=MyWidth/2; intB=MyHeight/2; //MyCenter图片中心点,发亮此值会让强光中心发生偏移 PointMyCenter=newPoint(MyWidth/2,MyHeight/2); //R强光照射面的半径,即”光晕” intR=Math.Min(MyWidth/2,MyHeight/2); for(inti=MyWidth-1;i>=1;i--) { for(intj=MyHeight-1;j>=1;j--) { floatMyLength=(float)Math.Sqrt(Math.Pow((i-MyCenter.X),2)+Math.Pow((j-MyCenter.Y),2)); //如果像素位于”光晕”之内 if(MyLength<R) { ColorMyColor=MyImage.GetPixel(i,j); intr,g,b; //220亮度增加常量,该值越大,光亮度越强 floatMyPixel=220.0f*(1.0f-MyLength/R); r=MyColor.R+(int)MyPixel; r=Math.Max(0,Math.Min(r,255)); g=MyColor.G+(int)MyPixel; g=Math.Max(0,Math.Min(g,255)); b=MyColor.B+(int)MyPixel; b=Math.Max(0,Math.Min(b,255)); //将增亮后的像素值回写到位图 ColorMyNewColor=Color.FromArgb(255,r,g,b); MyImage.SetPixel(i,j,MyNewColor); } } //重新绘制图片 MyGraphics.DrawImage(MyImage,newRectangle(0,0,MyWidth,MyHeight)); } } ///<summary> ///油画效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidYouHuaImage(Bitmapbmp,PictureBoxpicBox) { //以油画效果显示图像 Graphicsg=picBox.CreateGraphics(); intwidth=bmp.Width; intheight=bmp.Height; RectangleFrect=newRectangleF(0,0,width,height); BitmapMyBitmap=bmp; Bitmapimg=MyBitmap.Clone(rect,System.Drawing.Imaging.PixelFormat.DontCare); //产生随机数序列 Randomrnd=newRandom(); //取不同的值决定油画效果的不同程度 intiModel=2; inti=width-iModel; while(i>1) { intj=height-iModel; while(j>1) { intiPos=rnd.Next(100000)%iModel; //将该点的RGB值设置成附近iModel点之内的任一点 Colorcolor=img.GetPixel(i+iPos,j+iPos); img.SetPixel(i,j,color); j=j-1; } i=i-1; } //重新绘制图像 g.Clear(Color.White); g.DrawImage(img,newRectangle(0,0,width,height)); } ///<summary> ///垂直百叶窗 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidBaiYeChuang1(Bitmapbmp,PictureBoxpicBox) { //垂直百叶窗显示图像 try { BitmapMyBitmap=(Bitmap)bmp.Clone(); intdw=MyBitmap.Width/30; intdh=MyBitmap.Height; Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray); Point[]MyPoint=newPoint[30]; for(intx=0;x<30;x++) { MyPoint[x].Y=0; MyPoint[x].X=x*dw; } Bitmapbitmap=newBitmap(MyBitmap.Width,MyBitmap.Height); for(inti=0;i<dw;i++) { for(intj=0;j<30;j++) { for(intk=0;k<dh;k++) { bitmap.SetPixel(MyPoint[j].X+i,MyPoint[j].Y+k,MyBitmap.GetPixel(MyPoint[j].X+i,MyPoint[j].Y+k)); } } picBox.Refresh(); picBox.Image=bitmap; System.Threading.Thread.Sleep(120); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///水平百叶窗 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidBaiYeChuang2(Bitmapbmp,PictureBoxpicBox) { //水平百叶窗显示图像 try { BitmapMyBitmap=(Bitmap)bmp.Clone(); intdh=MyBitmap.Height/20; intdw=MyBitmap.Width; Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray); Point[]MyPoint=newPoint[20]; for(inty=0;y<20;y++) { MyPoint[y].X=0; MyPoint[y].Y=y*dh; } Bitmapbitmap=newBitmap(MyBitmap.Width,MyBitmap.Height); for(inti=0;i<dh;i++) { for(intj=0;j<20;j++) { for(intk=0;k<dw;k++) { bitmap.SetPixel(MyPoint[j].X+k,MyPoint[j].Y+i,MyBitmap.GetPixel(MyPoint[j].X+k,MyPoint[j].Y+i)); } } picBox.Refresh(); picBox.Image=bitmap; System.Threading.Thread.Sleep(100); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///左右拉伸效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidLaShen_ZuoDaoYou(Bitmapbmp,PictureBoxpicBox) { //以从左向右拉伸方式显示图像 try { intwidth=bmp.Width;//图像宽度 intheight=bmp.Height;//图像高度 Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray);//初始为全灰色 for(intx=1;x<=width;x++) { Bitmapbitmap=bmp.Clone(newRectangle(0,0,x,height),System.Drawing.Imaging.PixelFormat.Format24bppRgb); g.DrawImage(bitmap,0,0); System.Threading.Thread.Sleep(10); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///淡入效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidDanRu(Bitmapbmp,PictureBoxpicBox) { //淡入显示图像 try { Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray); intwidth=bmp.Width; intheight=bmp.Height; ImageAttributesattributes=newImageAttributes(); ColorMatrixmatrix=newColorMatrix(); //创建淡入颜色矩阵 matrix.Matrix00=(float)0.0; matrix.Matrix01=(float)0.0; matrix.Matrix02=(float)0.0; matrix.Matrix03=(float)0.0; matrix.Matrix04=(float)0.0; matrix.Matrix10=(float)0.0; matrix.Matrix11=(float)0.0; matrix.Matrix12=(float)0.0; matrix.Matrix13=(float)0.0; matrix.Matrix14=(float)0.0; matrix.Matrix20=(float)0.0; matrix.Matrix21=(float)0.0; matrix.Matrix22=(float)0.0; matrix.Matrix23=(float)0.0; matrix.Matrix24=(float)0.0; matrix.Matrix30=(float)0.0; matrix.Matrix31=(float)0.0; matrix.Matrix32=(float)0.0; matrix.Matrix33=(float)0.0; matrix.Matrix34=(float)0.0; matrix.Matrix40=(float)0.0; matrix.Matrix41=(float)0.0; matrix.Matrix42=(float)0.0; matrix.Matrix43=(float)0.0; matrix.Matrix44=(float)0.0; matrix.Matrix33=(float)1.0; matrix.Matrix44=(float)1.0; //从0到1进行修改色彩变换矩阵主对角线上的数值 //使三种基准色的饱和度渐增 Singlecount=(float)0.0; while(count<1.0) { matrix.Matrix00=count; matrix.Matrix11=count; matrix.Matrix22=count; matrix.Matrix33=count; attributes.SetColorMatrix(matrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap); g.DrawImage(bmp,newRectangle(0,0,width,height),0,0,width,height,GraphicsUnit.Pixel,attributes); System.Threading.Thread.Sleep(200); count=(float)(count+0.02); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///逆时针旋转 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidXuanZhuan90(Bitmapbmp,PictureBoxpicBox) { try { Graphicsg=picBox.CreateGraphics(); bmp.RotateFlip(RotateFlipType.Rotate90FlipXY); g.Clear(Color.White); g.DrawImage(bmp,0,0); } catch(Exceptione) { MessageBox.Show(e.ToString()); } } ///<summary> ///顺时针旋转 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidXuanZhuan270(Bitmapbmp,PictureBoxpicBox) { try { Graphicsg=picBox.CreateGraphics(); bmp.RotateFlip(RotateFlipType.Rotate270FlipXY); g.Clear(Color.White); g.DrawImage(bmp,0,0); } catch(Exceptione) { MessageBox.Show(e.ToString()); } } ///<summary> ///分块显示 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidFenKuai(BitmapMyBitmap,PictureBoxpicBox) { //以分块效果显示图像 Graphicsg=picBox.CreateGraphics(); g.Clear(Color.White); intwidth=MyBitmap.Width; intheight=MyBitmap.Height; //定义将图片切分成四个部分的区域 RectangleF[]block={ newRectangleF(0,0,width/2,height/2), newRectangleF(width/2,0,width/2,height/2), newRectangleF(0,height/2,width/2,height/2), newRectangleF(width/2,height/2,width/2,height/2)}; //分别克隆图片的四个部分 Bitmap[]MyBitmapBlack={ MyBitmap.Clone(block[0],System.Drawing.Imaging.PixelFormat.DontCare), MyBitmap.Clone(block[1],System.Drawing.Imaging.PixelFormat.DontCare), MyBitmap.Clone(block[2],System.Drawing.Imaging.PixelFormat.DontCare), MyBitmap.Clone(block[3],System.Drawing.Imaging.PixelFormat.DontCare)}; //绘制图片的四个部分,各部分绘制时间间隔为0.5秒 g.DrawImage(MyBitmapBlack[0],0,0); System.Threading.Thread.Sleep(500); g.DrawImage(MyBitmapBlack[1],width/2,0); System.Threading.Thread.Sleep(500); g.DrawImage(MyBitmapBlack[3],width/2,height/2); System.Threading.Thread.Sleep(500); g.DrawImage(MyBitmapBlack[2],0,height/2); } ///<summary> ///积木特效 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidJiMu(BitmapMyBitmap,PictureBoxpicBox) { //以积木效果显示图像 try { GraphicsmyGraphics=picBox.CreateGraphics(); intmyWidth,myHeight,i,j,iAvg,iPixel; ColormyColor,myNewColor; RectangleFmyRect; myWidth=MyBitmap.Width; myHeight=MyBitmap.Height; myRect=newRectangleF(0,0,myWidth,myHeight); Bitmapbitmap=MyBitmap.Clone(myRect,System.Drawing.Imaging.PixelFormat.DontCare); i=0; while(i<myWidth-1) { j=0; while(j<myHeight-1) { myColor=bitmap.GetPixel(i,j); iAvg=(myColor.R+myColor.G+myColor.B)/3; iPixel=0; if(iAvg>=128) iPixel=255; else iPixel=0; myNewColor=Color.FromArgb(255,iPixel,iPixel,iPixel); bitmap.SetPixel(i,j,myNewColor); j=j+1; } i=i+1; } myGraphics.Clear(Color.WhiteSmoke); myGraphics.DrawImage(bitmap,newRectangle(0,0,myWidth,myHeight)); } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///马赛克效果 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidMaSaiKe(BitmapMyBitmap,PictureBoxpicBox) { //以马赛克效果显示图像 try { intdw=MyBitmap.Width/50; intdh=MyBitmap.Height/50; Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray); Point[]MyPoint=newPoint[2500]; for(intx=0;x<50;x++) for(inty=0;y<50;y++) { MyPoint[x*50+y].X=x*dw; MyPoint[x*50+y].Y=y*dh; } Bitmapbitmap=newBitmap(MyBitmap.Width,MyBitmap.Height); for(inti=0;i<10000;i++) { System.RandomMyRandom=newRandom(); intiPos=MyRandom.Next(2500); for(intm=0;m<dw;m++) for(intn=0;n<dh;n++) { bitmap.SetPixel(MyPoint[iPos].X+m,MyPoint[iPos].Y+n,MyBitmap.GetPixel(MyPoint[iPos].X+m,MyPoint[iPos].Y+n)); } picBox.Refresh(); picBox.Image=bitmap; } for(inti=0;i<2500;i++) for(intm=0;m<dw;m++) for(intn=0;n<dh;n++) { bitmap.SetPixel(MyPoint[i].X+m,MyPoint[i].Y+n,MyBitmap.GetPixel(MyPoint[i].X+m,MyPoint[i].Y+n)); } picBox.Refresh(); picBox.Image=bitmap; } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///自动旋转 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidXuanZhuan(BitmapMyBitmap,PictureBoxpicBox) { Graphicsg=picBox.CreateGraphics(); floatMyAngle=0;//旋转的角度 while(MyAngle<360) { TextureBrushMyBrush=newTextureBrush(MyBitmap); picBox.Refresh(); MyBrush.RotateTransform(MyAngle); g.FillRectangle(MyBrush,0,0,MyBitmap.Width,MyBitmap.Height); MyAngle+=0.5f; System.Threading.Thread.Sleep(50); } } ///<summary> ///上下对接 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidDuiJie_ShangXia(BitmapMyBitmap,PictureBoxpicBox) { //以上下对接方式显示图像 try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.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++; g.Clear(Color.Gray); g.DrawImage(bitmap,0,0); System.Threading.Thread.Sleep(10); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///上下翻转 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidFanZhuan_ShangXia(BitmapMyBitmap,PictureBoxpicBox) { //以上下反转方式显示图像 try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.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.ToSingle(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,"信息提示"); } } ///<summary> ///左右对接 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidDuiJie_ZuoYou(BitmapMyBitmap,PictureBoxpicBox) { //以左右对接方式显示图像 try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray);//初始为全灰色 Bitmapbitmap=newBitmap(width,height); intx=0; while(x<=width/2) { for(inti=0;i<=height-1;i++) { bitmap.SetPixel(x,i,MyBitmap.GetPixel(x,i)); } for(inti=0;i<=height-1;i++) { bitmap.SetPixel(width-x-1,i, MyBitmap.GetPixel(width-x-1,i)); } x++; g.Clear(Color.Gray); g.DrawImage(bitmap,0,0); System.Threading.Thread.Sleep(10); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } ///<summary> ///左右翻转 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidFanZhuan_ZuoYou(BitmapMyBitmap,PictureBoxpicBox) { //以左右反转方式显示图像 try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray);//初始为全灰色 for(intj=-height/2;j<=height/2;j++) { g.Clear(Color.Gray);//初始为全灰色 inti=Convert.ToInt32(j*(Convert.ToSingle(width)/Convert.ToSingle(height))); RectangleDestRect=newRectangle(width/2-i,0,2*i,height); 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,"信息提示"); } } ///<summary> ///四周扩散 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidKuoSan(BitmapMyBitmap,PictureBoxpicBox) { try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.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,"信息提示"); } } ///<summary> ///上下拉伸 ///</summary> ///<paramname="bmp">Bitmap对象</param> ///<paramname="picBox">PictureBox对象</param> publicstaticvoidLaShen_ShangDaoXiao(BitmapMyBitmap,PictureBoxpicBox) { //以从上向下拉伸方式显示图像 try { intwidth=MyBitmap.Width;//图像宽度 intheight=MyBitmap.Height;//图像高度 Graphicsg=picBox.CreateGraphics(); g.Clear(Color.Gray);//初始为全灰色 for(inty=1;y<=height;y++) { Bitmapbitmap=MyBitmap.Clone(newRectangle(0,0,width,y),System.Drawing.Imaging.PixelFormat.Format24bppRgb); g.DrawImage(bitmap,0,0); System.Threading.Thread.Sleep(10); } } catch(Exceptionex) { MessageBox.Show(ex.Message,"信息提示"); } } } }
另外还有一种调用API实现的特效:
//代码出自CSDN //仅供参考 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Runtime.InteropServices; namespaceWindowsFormsApplication4 { [Flags] publicenumAnimationType { AW_HOR_POSITIVE=0x0001,//从左向右显示 AW_HOR_NEGATIVE=0x0002,//从右向左显示 AW_VER_POSITIVE=0x0004,//从上到下显示 AW_VER_NEGATIVE=0x0008,//从下到上显示 AW_CENTER=0x0010,//从中间向四周 AW_HIDE=0x10000, AW_ACTIVATE=0x20000,//普通显示 AW_SLIDE=0x40000, AW_BLEND=0x80000,//透明渐变显示效果 } publicpartialclassForm1:Form { [DllImport("user32.dll")] publicstaticexternboolAnimateWindow(IntPtrhwnd,uintdwTime,AnimationTypedwFlags); privatePictureBoxpictureBox1,pictureBox2; privateList<Image>girls=newList<Image>(); privateTimertimer=newTimer(); privateintindex=0; publicForm1() { InitializeComponent(); this.WindowState=FormWindowState.Maximized; this.FormBorderStyle=FormBorderStyle.None; this.BackColor=Color.Black; this.DoubleBuffered=true; pictureBox1=newPictureBox(); pictureBox1.Location=newPoint(200,100); pictureBox1.Size=newSystem.Drawing.Size(640,480); pictureBox1.SizeMode=PictureBoxSizeMode.AutoSize; pictureBox1.Visible=false; this.Controls.Add(pictureBox1); pictureBox2=newPictureBox(); pictureBox2.Location=newPoint(400,300); pictureBox2.Size=newSystem.Drawing.Size(640,480); pictureBox2.SizeMode=PictureBoxSizeMode.AutoSize; pictureBox1.Visible=false; this.Controls.Add(pictureBox2); using(OpenFileDialogdlg=newOpenFileDialog()) { dlg.Multiselect=true; dlg.Filter="jpegfiles(*.jpg)|*.jpg"; if(dlg.ShowDialog()==DialogResult.OK) { foreach(stringfileindlg.FileNames) { girls.Add(Image.FromFile(file)); } } } timer.Interval=3000; timer.Tick+=newEventHandler(timer_Tick); timer.Enabled=true; } voidtimer_Tick(objectsender,EventArgse) { if(girls.Count==0) {return;} ImagecurrentGirl=girls[index++]; pictureBox2.Image=currentGirl; AnimateWindow(pictureBox2.Handle,1000, GetRandomAnimationType()); AnimateWindow(pictureBox1.Handle,1000,AnimationType.AW_HIDE); pictureBox1.Visible=false; PictureBoxtemp=pictureBox1; pictureBox1=pictureBox2; pictureBox2=temp; if(index>=girls.Count) { index=0; } } privateRandomrandom=newRandom(); privateAnimationType[]animationTypes=null; privateAnimationTypeGetRandomAnimationType() { if(animationTypes==null) { animationTypes=Enum.GetValues(typeof(AnimationType)) asAnimationType[]; } returnanimationTypes[random.Next(0,animationTypes.Length-1)]; } protectedoverridevoidOnKeyDown(KeyEventArgse) { if(e.KeyCode==Keys.Escape) { timer.Enabled=false; foreach(Imagegirlingirls) { girl.Dispose(); } this.Close(); } base.OnKeyDown(e); } } }
希望本文所述实例对大家C#程序设计有所帮助。
相关文章
- C# winform开发界面美化
- winform能做出漂亮的界面吗_winform界面美化第三方控件
- Winform自定义控件在属性窗口修改属性后,在窗体设计器不生成代码
- winform与php交互,WinForm与Javascript交互「建议收藏」
- .NetWInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用
- Winform跨线程操作的简单方法
- winform使用委托和事件来完成两个窗体之间通信的实例
- c#winform取消右上角关闭按钮的实现方法
- c#实现winform屏幕截图并保存的示例
- C#实现winform渐变效果的方法
- C#WinForm应用程序降低系统内存占用方法总结
- winform导出dataviewgrid数据为excel的方法
- WinForm中变Enter键为Tab键实现焦点转移的方法
- C#Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法
- winform异型不规则界面设计的实现方法
- WinForm实现同时让两个窗体有激活效果的特效实例