C#自定义签名章实现方法
本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Drawing; usingSystem.Drawing.Imaging; usingSystem.Drawing.Drawing2D; namespaceWfpApp { publicclassDrawCachet { ///<summary> ///自定义椭圆形签名章 ///</summary> ///<paramname="Width">宽度,画出的签名章只有这宽度的一半</param> ///<paramname="Height">高度,画出的签名章只有这高度的一半</param> ///<paramname="test">签名章上名字</param> ///<paramname="IsRotate">签名章是否旋转角度</param> ///<paramname="angle">旋转角度的大小</param> ///<returns></returns> publicstaticBitmapGetDrawCircleCachet(intWidth,intHeight,stringtest,boolIsRotate,intangle) { //记录圆画笔的粗细 intCircle_Brush=2; //画布 Bitmapbitmap=newBitmap(Width,Height); //定义字符串的样式 Fontvar_Font=newFont("Arial",13,FontStyle.Bold); //定义一个矩形,设置圆的绘制区 Rectanglerect=newRectangle(10,10,Width/2,Height/2); //实例化Graphic类 Graphicsg=System.Drawing.Graphics.FromImage(bitmap); //消除绘制图形的锯齿,平滑 g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //以白色清空panelCachet画布背景 g.Clear(Color.White); //设置画笔的颜色 Penmypen=newPen(Color.Red,Circle_Brush); //绘制圆 g.DrawEllipse(mypen,rect); //设置文字的字体样式 Fontstar_Font=newFont("Arial",12,FontStyle.Regular); //对字符串进行宽度和长度测量 SizeFvar_Size=g.MeasureString(test,star_Font); floatCircleZjW=rect.Width+2*Circle_Brush; floatCircleZJH=rect.Height+2*Circle_Brush; floatx=(CircleZjW-var_Size.Width)/2F+rect.X; floaty=(CircleZJH-var_Size.Height)/2F+rect.Y; //在指定的位置绘制文字 g.DrawString(test,star_Font,mypen.Brush,newPointF(x,y)); if(IsRotate) bitmap=Rotate(bitmap,angle); returnbitmap; } ///<summary> ///自定义矩形签名章 ///</summary> ///<paramname="width">宽度,画出的签名章只有这宽度的一半</param> ///<paramname="height">高度,画出的签名章只有这高度的一半</param> ///<paramname="name">签名章上名字</param> ///<paramname="IsRotate">签名章是否旋转角度</param> ///<paramname="angle">旋转角度的大小</param> ///<returns></returns> publicstaticBitmapGetDrawRectangle(intwidth,intheight,stringname,boolIsRotate,intangle) { //记录圆画笔的粗细 intCircle_Brush=2; //画布 Bitmapbitmap=newBitmap(width,height); //定义字符串的样式 Fontvar_Font=newFont("Arial",13,FontStyle.Bold); //定义一个矩形,设置圆的绘制区 Rectanglerect=newRectangle(10,10,width/2,height/2); //实例化Graphic类 Graphicsg=System.Drawing.Graphics.FromImage(bitmap); //消除绘制图形的锯齿,平滑 g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //以白色清空panelCachet画布背景 g.Clear(Color.White); //设置画笔的颜色 Penmypen=newPen(Color.Red,Circle_Brush); //绘制圆 g.DrawRectangle(mypen,rect); //设置文字的字体样式 Fontstar_Font=newFont("Arial",12,FontStyle.Regular); //对字符串进行宽度和长度测量 SizeFvar_Size=g.MeasureString(name,star_Font); floatCircleZjW=rect.Width+2*Circle_Brush; floatCircleZJH=rect.Height+2*Circle_Brush; floatx=(CircleZjW-var_Size.Width)/2F+rect.X; floaty=(CircleZJH-var_Size.Height)/2F+rect.Y; //在指定的位置绘制文字 g.DrawString(name,star_Font,mypen.Brush,newPointF(x,y)); if(IsRotate) bitmap=Rotate(bitmap,angle); returnbitmap; } ///<summary> ///签名章旋转 ///</summary> ///<paramname="b">Bitmap图章</param> ///<paramname="angle">旋转度</param> ///<returns></returns> staticBitmapRotate(Bitmapb,intangle) { angle=angle%360; //弧度转换 doubleradian=angle*Math.PI/180.0; doublecos=Math.Cos(radian); doublesin=Math.Sin(radian); //原图的宽和高 intw=b.Width; inth=b.Height; intW=(int)(Math.Max(Math.Abs(w*cos-h*sin),Math.Abs(w*cos+h*sin))); intH=(int)(Math.Max(Math.Abs(w*sin-h*cos),Math.Abs(w*sin+h*cos))); //目标位图 BitmapdsImage=newBitmap(W,H); System.Drawing.Graphicsg=System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 PointOffset=newPoint((W-w)/2,(H-h)/2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectanglerect=newRectangle(Offset.X,Offset.Y,w,h); Pointcenter=newPoint(rect.X+rect.Width/2,rect.Y+rect.Height/2); g.TranslateTransform(center.X,center.Y); g.RotateTransform(360-angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X,-center.Y); g.DrawImage(b,rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); //dsImage.Save("yuancd.jpg",System.Drawing.Imaging.ImageFormat.Jpeg); returndsImage; } } }
希望本文所述对大家的C#程序设计有所帮助。