画笔几个方法的学习

using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace DrawTest { class DrawHelper { //生成验证字符串 private string CreateCheckCodeString() { //定义用于验证符的字符数组 char[] allCharArray = {'0','1','2','3','4','5','6','7','8','9','A','S','C','D','E','F','G', 'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; //定义验证字符串 string randomCode = ""; Random rand = new Random(); for (int i = 0; i < 4; i++) { randomCode +=allCharArray[rand.Next (allCharArray.Length)]; } return randomCode; } /// <summary> /// 生成验证图片 /// </summary> /// <param name="sFilePath">图片的存储地址</param> private void CreateCheckCodeImage(string sFilePath) { // 定义图片的宽度 int iWidth = 55; // 定义图片的高度 int iHeight = 22; // 定义字体 Font font = new Font("Arial", 12, FontStyle.Bold); // 定义黑色的画笔,用于绘制文字 SolidBrush brush = new SolidBrush(Color .Black); // 定义钢笔,绘制干扰线 Pen pen1 = new Pen(Color .Gray,0); Pen pen2 = new Pen(Color .FromArgb(255,100,100,100),0);//根据argb获取颜色 //创建一个55px*22px的图像 Bitmap image = new Bitmap(iWidth ,iHeight ); //从图像上获取一个会图面 Graphics g = Graphics.FromImage(image); // 清楚整个绘图画面并以指定颜色填充 g.Clear(ColorTranslator .FromHtml("#F0F0F0"));//从HTML中获取颜色对象 //定义文字的绘制矩形区域 RectangleF rect = new RectangleF(5,2,iWidth ,iHeight ); //绘制干扰线 Random rand = new Random();//定义随即对象绘制干扰线 //两条横向干扰线 for (int i = 0; i < 2; i++) { //定义起点 Point p1 = new Point(0,rand.Next (iHeight)); //定义终点 Point p2 = new Point(iWidth ,rand .Next (iHeight)); //绘制直线 g.DrawLine(pen1,p1,p2); } //生成4条纵向的干扰线 for (int i = 0; i < 4; i++) { //定义起点 Point p1 = new Point(rand.Next (iWidth ),0); //定义终点 Point p2 = new Point(rand.Next (iWidth ),iHeight); //绘制直线 g.DrawLine(pen2, p1, p2); } //绘制文字 g.DrawString(CreateCheckCodeString(),font ,brush,rect); try { //保存为jpeg格式 image.Save(sFilePath, ImageFormat.Jpeg); } catch { } //释放对象 g.Dispose(); image.Dispose(); } /// <summary> /// 生成缩略图 /// </summary> /// <param name="sFileSrcPath">源文件图像地址</param> /// <param name="sFileDstPath">目标图像地址</param> /// <param name="iSizeLimit">指定的大小</param> public void CreateThumbnailImage(string sFileSrcPath, string sFileDstPath, int iSizeLimit) { //检测原图片是否存在 if (File.Exists(sFileSrcPath)) { //获取原图片图像 Image image = Image.FromFile(sFileSrcPath); //定义大小结构 SizeF size = new SizeF(image .Width ,image .Height ); //计算出符合要求的大小 while (size.Width > iSizeLimit || size.Height > iSizeLimit) { size.Height /= 1.1F; size.Width /= 1.1F; } //创建缩略图像 Bitmap bitmap = new Bitmap(Convert.ToInt16(size.Width), Convert.ToInt16(size.Height)); //创建绘画面 Graphics g = Graphics.FromImage(bitmap ); //清楚颜色,用透明色填充 g.Clear(Color .Transparent); //定义源图像的矩形区域 Rectangle srcrect = new Rectangle(0,0,image.Width ,image .Height ); //定义缩略图的矩形区域 Rectangle Dstrect = new Rectangle(0,0,bitmap .Width ,bitmap .Height ); //绘制图 g.DrawImage(image,Dstrect ,srcrect ,GraphicsUnit.Pixel); //存储为jpeg格式的图片 bitmap.Save(sFileDstPath,ImageFormat.Jpeg); //释放对象 g.Dispose(); image.Dispose(); bitmap.Dispose(); } } /// <summary> /// 生成黑白图像,仅支持jpeg格式,效率很差 /// </summary> /// <param name="sFileSrcPath">源文件</param> /// <param name="sFileDstPath">目标文件</param> public void CreateBlackAndWhiteImage(string sFileSrcPath, string sFileDstPath) { //获取源图片图像 Bitmap image = (Bitmap)Image.FromFile(sFileSrcPath); //源图像的大小 int iWidth = image.Width; int IHeight = image.Height; //创建黑白图像 Bitmap bitmap = new Bitmap(iWidth, IHeight); //定义临时变量 Color color; int value; //遍历所有像素 for (int i = 0; i < iWidth; i++) { for (int j = 0; j < IHeight; j++) { //从源图像中得到当前像素的color对象 color = image.GetPixel(i,j); //计算新的RGB值 value=(int)(0.299*color.R+0.14*color .G+0.587*color .B); //设置新的像素 bitmap.SetPixel(i,j,Color.FromArgb(value,value,value)); } } //存储为jpeg格式的图片 bitmap.Save(sFileDstPath,ImageFormat.Jpeg); //释放对象 image.Dispose(); bitmap.Dispose(); } /// <summary> /// 测试 /// </summary> /// <param name="args"></param> static void Main(string[] args) { DrawHelper p = new DrawHelper(); p.CreateCheckCodeImage(@"D:\Test\CheckCode.jpg"); p.CreateThumbnailImage(@"D:\Test\Test.jpg",@"D:\Test\Test_Small.jpg",100); p.CreateBlackAndWhiteImage(@"D:\Test\Test.jpg", @"D:\Test\Test_BlackAndWhite.jpg"); } } }

//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值