C#图像处理和特效Word文档下载推荐.docx

上传人:b****5 文档编号:16263560 上传时间:2022-11-22 格式:DOCX 页数:30 大小:422.50KB
下载 相关 举报
C#图像处理和特效Word文档下载推荐.docx_第1页
第1页 / 共30页
C#图像处理和特效Word文档下载推荐.docx_第2页
第2页 / 共30页
C#图像处理和特效Word文档下载推荐.docx_第3页
第3页 / 共30页
C#图像处理和特效Word文档下载推荐.docx_第4页
第4页 / 共30页
C#图像处理和特效Word文档下载推荐.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C#图像处理和特效Word文档下载推荐.docx

《C#图像处理和特效Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C#图像处理和特效Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。

C#图像处理和特效Word文档下载推荐.docx

newPoint(0,0)};

//destinationforlower-leftpointoforiginal

g.DrawImage(bmp,destinationPoints);

}

//旋转图像180°

newPoint(0,100),//destinationforupper-leftpointoforiginal

//图像切变代码:

newPoint(0,0),//destinationforupper-leftpointoforiginal

newPoint(100,0),//destinationforupper-rightpointoforiginal

newPoint(50,100)};

//destinationforlower-leftpointoforiginal

//图像截取:

Rectanglesr=newRectangle(80,60,400,400);

//要截取的矩形区域

Rectangledr=newRectangle(0,0,200,200);

//要显示到Form的矩形区域

g.DrawImage(bmp,dr,sr,GraphicsUnit.Pixel);

//改变图像大小:

intwidth=bmp.Width;

intheight=bmp.Height;

// 

改变图像大小使用低质量的模式

g.InterpolationMode=InterpolationMode.NearestNeighbor;

g.DrawImage(bmp,newRectangle(10,10,120,120),//sourcerectangle

newRectangle(0,0,width,height),//destinationrectangle

GraphicsUnit.Pixel);

使用高质量模式

//g.CompositingQuality=CompositingQuality.HighSpeed;

g.InterpolationMode=InterpolationMode.HighQualityBicubic;

g.DrawImage(

bmp,

newRectangle(130,10,120,120), 

newRectangle(0,0,width,height),

//设置图像的分辩率:

bmp.SetResolution(300f,300f);

g.DrawImage(bmp,0,0);

bmp.SetResolution(1200f,1200f);

g.DrawImage(bmp,180,0);

//用GDI+画图

GraphicsgForm=e.Graphics;

gForm.FillRectangle(Brushes.White,this.ClientRectangle);

for(inti=1;

i<

=7;

++i)

//在窗体上面画出橙色的矩形

Rectangler=newRectangle(i*40-15,0,15,

this.ClientRectangle.Height);

gForm.FillRectangle(Brushes.Orange,r);

//在内存中创建一个Bitmap并设置CompositingMode

Bitmapbmp=newBitmap(260,260,

System.Drawing.Imaging.PixelFormat.Format32bppArgb);

GraphicsgBmp=Graphics.FromImage(bmp);

gBmp.CompositingMode=System.Drawing.Drawing2D.CompositingMode.SourceCopy;

创建一个带有Alpha的红色区域

并将其画在内存的位图里面

Colorred=Color.FromArgb(0x60,0xff,0,0);

BrushredBrush=newSolidBrush(red);

gBmp.FillEllipse(redBrush,70,70,160,160);

创建一个带有Alpha的绿色区域

Colorgreen=Color.FromArgb(0x40,0,0xff,0);

BrushgreenBrush=newSolidBrush(green);

gBmp.FillRectangle(greenBrush,10,10,140,140);

//在窗体上面画出位图 

nowdrawthebitmaponourwindow

gForm.DrawImage(bmp,20,20,bmp.Width,bmp.Height);

清理资源

bmp.Dispose();

gBmp.Dispose();

redBrush.Dispose();

greenBrush.Dispose();

//在窗体上面绘图并显示图像

PenblackPen=newPen(Color.Black,1);

if(ClientRectangle.Height/10>

0)

for(inty=0;

y<

ClientRectangle.Height;

y+=ClientRectangle.Height/10)

g.DrawLine(blackPen,newPoint(0,0),newPoint(ClientRectangle.Width,y));

blackPen.Dispose();

C# 

使用Bitmap类进行图片裁剪

在Mapwin(手机游戏地图编辑器)生成的地图txt文件中添加自己需要处理的数据后转换成可在手机(Ophone)开发环境中使用的字节流地图文件的小工具,其中就涉及到图片的裁剪和生成了。

有以下几种方式。

方法一:

拷贝像素。

当然这种方法是最笨的,效率也就低了些。

在Bitmap类中我们可以看到这样两个方法:

GetPixel(intx,inty)和SetPixel(intx,inty,Colorcolor)方法。

从字面的含以上就知道前者是获取图像某点像素值,是用Color对象返回的;

后者是将已知像素描画到制定的位置。

下面就来做个实例检验下:

1.首先创建一个WindowsForm窗体程序,往该窗体上拖放7个PictureBox控件,第一个用于放置并显示原始的大图片,其后6个用于放置并显示裁剪后新生成的6个小图;

2.放置原始大图的PictureBox控件name属性命名为pictureBoxBmpRes,其后pictureBox1到pictureBox6依次命名,并放置在合适的位置;

3.双击Form窗体,然后在Form1_Load事件中加入下面的代码即可。

//导入图像资源

BitmapbmpRes=null;

StringstrPath=Application.ExecutablePath;

try{

intnEndIndex=strPath.LastIndexOf('

//'

strPath=strPath.Substring(0,nEndIndex)+"

//Bmp//BmpResMM.bmp"

;

bmpRes=newBitmap(strPath);

//窗体上显示加载图片

pictureBoxBmpRes.Width=bmpRes.Width;

pictureBoxBmpRes.Height=bmpRes.Height;

pictureBoxBmpRes.Image=bmpRes;

}

catch(Exceptionex)

{

System.Windows.Forms.MessageBox.Show("

图片资源加载失败!

/r/n"

+ex.ToString());

//裁剪图片(裁成2行3列的6张图片)

intnYClipNum=2,nXClipNum=3;

Bitmap[]bmpaClipBmpArr=newBitmap[nYClipNum*nXClipNum];

 

for(intnYClipNumIndex=0;

nYClipNumIndex<

nYClipNum;

nYClipNumIndex++)

for(intnXClipNumIndex=0;

nXClipNumIndex<

nXClipNum;

nXClipNumIndex++)

intnClipWidth=bmpRes.Width/nXClipNum;

intnClipHight=bmpRes.Height/nYClipNum;

intnBmpIndex=nXClipNumIndex+nYClipNumIndex*nYClipNum+(nYClipNumIndex>

0?

1:

0);

bmpaClipBmpArr[nBmpIndex]=newBitmap(nClipWidth,nClipHight);

for(intnY=0;

nY<

nClipHight;

nY++)

for(intnX=0;

nX<

nClipWidth;

nX++)

intnClipX=nX+nClipWidth*nXClipNumIndex;

intnClipY=nY+nClipHight*nYClipNumIndex;

ColorcClipPixel=bmpRes.GetPixel(nClipX,nClipY);

bmpaClipBmpArr[nBmpIndex].SetPixel(nX,nY,cClipPixel);

PictureBox[]picbShow=newPictureBox[nYClipNum*nXClipNum];

picbShow[0]=pictureBox1;

picbShow[1]=pictureBox2;

picbShow[2]=pictureBox3;

picbShow[3]=pictureBox4;

picbShow[4]=pictureBox5;

picbShow[5]=pictureBox6;

for(intnLoop=0;

nLoop<

nYClipNum*nXClipNum;

nLoop++)

picbShow[nLoop].Width=bmpRes.Width/nXClipNum;

picbShow[nLoop].Height=bmpRes.Height/nYClipNum;

picbShow[nLoop].Image=bmpaClipBmpArr[nLoop];

现在看看那些地方需要注意的了。

其中

intnBmpIndex=

nXClipNumIndex+nYClipNumIndex*nYClipNum+ 

(nYClipNumIndex>

这句定义了存储裁剪图片对象在数组中的索引,需要注意的就是后面的(nYClipNumIndex>

0)——因为只有当裁剪的对象处于第一行以外的行时需要将索引加1;

另外,因为这种方法的效率不高,程序运行起来还是顿了下。

如果有兴趣的话,可以将以上的代码放到一个按钮Click事件函数中,当单击该按钮时就可以感觉到了。

方法二:

运用Clone函数局部复制。

同样在Bitmap中可以找到Clone()方法,该方法有三个重载方法。

Clone(),Clone(Rectangle, 

PixelFormat)和Clone(RectangleF, 

PixelFormat)。

第一个方法将创建并返回一个精确的实例对象,后两个就是我们这里需要用的局部裁剪了(其实后两个方法本人觉得用法上差不多)。

将上面的程序稍稍改进下——将裁剪的处理放到一个按钮事件函数中,然后再托一个按钮好窗体上,最后将下面的代码复制到该按钮的事件函数中。

for(intnYClipNumIndex=0;

for(intnXClipNumIndex=0;

intnClipWidth=bmpRes.Width/nXClipNum;

intnClipHight=bmpRes.Height/nYClipNum;

nXClipNumIndex+nYClipNumIndex*nYClipNum+(nYClipNumIndex>

0?

1:

0);

RectanglerClipRect=newRectangle(nClipWidth*nXClipNumIndex,

nClipHight*nYClipNumIndex,

nClipWidth,

nClipHight);

bmpaClipBmpArr[nBmpIndex]=bmpRes.Clone(rClipRect,bmpRes.PixelFormat);

运行程序,单击按钮检验下,发现速度明显快可很多。

其实这种方法较第一中方法不同的地方仅只是变换了for循环中的拷贝部分的处理,

nClipHight*nYClipNumIndex,

一. 

底片效果

原理:

GetPixel方法获得每一点像素的值, 

然后再使用SetPixel方法将取反后的颜色值设置到对应的点.

效果图:

代码实现:

privatevoidbutton1_Click(objectsender,EventArgse)

//以底片效果显示图像

try

intHeight=this.pictureBox1.Image.Height;

intWidth=this.pictureBox1.Image.Width;

Bitmapnewbitmap

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1