zoukankan      html  css  js  c++  java
  • C#学习笔记-图像处理篇(一)绘制公章

    上个月免费帮别人做事,就一直在服务员和程序员中来回切换,所以好多事情都弄得乱糟糟的,家里也是乱七八糟的,所以学习这一块也放了一段时间。

    刚刚开始当服务员的时间看到了形形色色的人,觉得很好玩,他们每个人像代码又不像,有的很简单,有的很美观,有的很复杂,有的还很神奇,可是他们确可以来回切换,很简单的能瞬间变复杂,很美观的也能瞬间变得不堪。所有你以为的,能瞬间翻天覆地。

    第一天去做事的时候,别人来了,我整个人都是懵的,完全不知道干什么,该做什么,该怎么说,大众会喜欢什么,不喜欢什么,如果遇到别人不高兴了,应该化解,所有的一切都是一片空白,整个人真的和傻子没什么区别.....( ╯□╰ )......大脑程序完全死机,但重启不了。

    后面每天一点一点去学才稍微能开始说话的,几个服务员姐姐教了我很多,她们有的实在,有的木讷,有的精明,有的聪慧,和代码相处久了,突然看到了活生生的,个性如此鲜明的人,就像突然间打开了新世界的大门一般,一切都新奇耀眼。她们和读书的时候遇见的各种同学,老师,家长甚至现在的同事都不一样,她们都有深刻的社会印记,她们都有自己鲜明的个性,独树一帜!每个人都像颗彩色的石头一般,有的地方璀璨夺目,有的地方暗淡无光。

    以后若是有空想起,再写写她们的模样吧,这也算每一天遇见的不同的风景的。

    闲话说了很多,回到正题,最近开始学习图像处理这一块了,学一点就记录一点,等写完也出了一个小软件了~

    这里的是:绘制公章。

      1 #region 绘制公章
      2         private void simpleButton_绘制公章_Click(object sender, EventArgs e)
      3         {
      4             int tem_Line = 0;  //圆的直径
      5             int circularity_W = 5; //画笔的粗细
      6             string star_Str = "";  //星星
      7             Font star_Font = new Font("Arial", 30, FontStyle.Regular);//设置星号的字体样式
      8 
      9             #region 画圆
     10 
     11             if (panel_绘制公章.Height > panel_绘制公章.Width)  //如果panel控件的高度大于等于宽度
     12             {
     13                 tem_Line = panel_绘制公章.Width;  //设置宽度为圆的直径
     14             }
     15             else
     16             {
     17                 tem_Line = panel_绘制公章.Height;  //设置高度为圆的直径
     18             }
     19             //设置圆的绘制区域=>现在是正方形的区域
     20             rect = new Rectangle(circularity_W, circularity_W, tem_Line - 2 * circularity_W, tem_Line - 2 * circularity_W);
     21 
     22             //补充:Graphics必须有载体,也就是在哪里绘
     23             //所以必须是this.CreateGraphics或者Panel..CreateGraphics等格式
     24             Graphics g = panel_绘制公章.CreateGraphics();//实例化Graphics类
     25             //消除绘制图形的锯齿
     26             g.SmoothingMode = SmoothingMode.AntiAlias;  //System.Drawing.Drawing2D;           
     27             g.Clear(Color.White);  //以白色清空panel1控件的背景,防止重复画           
     28             Pen myPen = new Pen(Color.Red, circularity_W);  //设置画笔(颜色和粗细)
     29             g.DrawEllipse(myPen, rect);  //绘制圆
     30 
     31             #endregion
     32 
     33             #region 画星星
     34 
     35             SizeF Var_Size = new SizeF(rect.Width, rect.Height);  //实例化SizeF类
     36             Var_Size = g.MeasureString(star_Str, star_Font);  //对指定字符串进行测量
     37 
     38             //正中间的位置绘制星号
     39             float star_x = (rect.Width / 2F) + circularity_W - Var_Size.Width / 2F;
     40             float star_y = rect.Height / 2F - Var_Size.Width / 2F;
     41             g.DrawString(star_Str, star_Font, myPen.Brush, new PointF(star_x, star_y));
     42             
     43             #endregion
     44 
     45             #region 画文字
     46 
     47             Var_Size = g.MeasureString("本人专用章", Var_Font);//对指定字符串进行测量
     48 
     49             //绘制文字:在中间,但是在星星下面
     50             float m = (rect.Width / 2F) + circularity_W - Var_Size.Width / 2F;
     51             float n = rect.Height / 2F + Var_Size.Height * 2;
     52             g.DrawString("本人专用章", Var_Font, myPen.Brush, new PointF(m, n));
     53 
     54             int len = 0;
     55             if (inputWords != null) //如果没有输入文字,加判断
     56             {
     57                 len = inputWords.Length;//获取字符串的长度
     58             }
     59 
     60             float angle = 180;//设置文字的初始旋转角度
     61             
     62             float change = 0;
     63 
     64             if (len > 1) //一个字的需要特殊处理
     65             {
     66                 change = 180 / (len - 1);
     67             }
     68             for (int i = 0; i < len; i++)//将文字以指定的弧度进行绘制
     69             {
     70                 if (len > 1)
     71                 {
     72                     //相当于把坐标系移动到了正中间
     73                     float x = (tem_Line + circularity_W / 2) / 2;
     74                     float y = (tem_Line + circularity_W / 2) / 2;
     75                     //将指定的平移添加到g的变换矩阵前         
     76                     g.TranslateTransform(x, y);
     77                     g.RotateTransform(angle);//将指定的旋转用于g的变换矩阵   
     78                     Brush myBrush = Brushes.Red;//定义画刷
     79 
     80                     //需要注意,这时文字的位置的坐标位置是以新的坐标系为基础得到的
     81                     float words_x = tem_Line / 2 - 6 * circularity_W;
     82                     float words_y = 0;
     83                     g.DrawString(inputWords.Substring(i, 1), Var_Font, myBrush, words_x, words_y);//显示旋转文字
     84                     g.ResetTransform();//将g的全局变换矩阵重置为单位矩阵=>对应TranslateTransform,相当于恢复操作
     85                     angle += change;//设置下一个文字的角度
     86 
     87                 }
     88                 else
     89                 {
     90                     //输入的文字为一个时候是特殊情况,单独考虑
     91                     float x = (tem_Line + circularity_W / 2) / 2;
     92                     float y = (tem_Line + circularity_W / 2) / 2;       
     93                     g.TranslateTransform(x, y);
     94                     g.RotateTransform(0);  
     95                     Brush myBrush = Brushes.Red;
     96                     float words_x = -circularity_W*3;
     97                     float words_y = -(tem_Line / 2 - 2 * circularity_W);
     98                     g.DrawString(inputWords.Substring(i, 1), Var_Font, myBrush, words_x, words_y);
     99                     g.ResetTransform();
    100                 }
    101                 
    102             }
    103 
    104             #endregion
    105 
    106         }
    107 
    108         private void simpleButton2_Click(object sender, EventArgs e)
    109         {
    110             inputWords = textBox_文字.Text;
    111             MessageBox.Show("保存成功!");
    112         }
    113 #endregion   

    效果预览图:

  • 相关阅读:
    CodeForces 639C Bear and Polynomials
    CodeForces 149E Martian Strings exkmp
    CodeForces 85D Sum of Medians Splay | 线段树
    CodeForces 149D Coloring Brackets
    CodeForces 526D Om Nom and Necklace
    CodeForces 875 D High Cry
    CodeForces 1018B The hat
    springMVC工程使用jreloader实现热部署
    ssh方式与服务器建立连接
    Weblogic在Linux下启动特别慢及进入控制台慢的解决方法
  • 原文地址:https://www.cnblogs.com/Aries-rong/p/6062434.html
Copyright © 2011-2022 走看看