zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Winform下实现图片切换特效的方法

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#程序设计有所帮助。