最近开始学习图像处理这一块了,学一点就记录一点,等写完也出了一个小软件了~
这里的是:绘制公章。
#region 绘制公章
        private void simplebutton_绘制公章_click(object sender, eventargs e)
        {
            int tem_line = 0;  //圆的直径
            int circularity_w = 5; //画笔的粗细
            string star_str = "★";  //星星
            font star_font = new font("arial", 30, fontstyle.regular);//设置星号的字体样式
            #region 画圆
            if (panel_绘制公章.height > panel_绘制公章.width)  //如果panel控件的高度大于等于宽度
            {
                tem_line = panel_绘制公章.width;  //设置宽度为圆的直径
            }
            else
            {
                tem_line = panel_绘制公章.height;  //设置高度为圆的直径
            }
            //设置圆的绘制区域=>现在是正方形的区域
            rect = new rectangle(circularity_w, circularity_w, tem_line - 2 * circularity_w, tem_line - 2 * circularity_w);
            //补充:graphics必须有载体,也就是在哪里绘
            //所以必须是this.creategraphics或者panel..creategraphics等格式
            graphics g = panel_绘制公章.creategraphics();//实例化graphics类
            //消除绘制图形的锯齿
            g.smoothingmode = smoothingmode.antialias;  //system.drawing.drawing2d;           
            g.clear(color.white);  //以白色清空panel1控件的背景,防止重复画           
            pen mypen = new pen(color.red, circularity_w);  //设置画笔(颜色和粗细)
            g.drawellipse(mypen, rect);  //绘制圆
            #endregion
            #region 画星星
            sizef var_size = new sizef(rect.width, rect.height);  //实例化sizef类
            var_size = g.measurestring(star_str, star_font);  //对指定字符串进行测量
            //正中间的位置绘制星号
            float star_x = (rect.width / 2f) + circularity_w - var_size.width / 2f;
            float star_y = rect.height / 2f - var_size.width / 2f;
            g.drawstring(star_str, star_font, mypen.brush, new pointf(star_x, star_y));
            
            #endregion
            #region 画文字
            var_size = g.measurestring("本人专用章", var_font);//对指定字符串进行测量
            //绘制文字:在中间,但是在星星下面
            float m = (rect.width / 2f) + circularity_w - var_size.width / 2f;
            float n = rect.height / 2f + var_size.height * 2;
            g.drawstring("本人专用章", var_font, mypen.brush, new pointf(m, n));
            int len = 0;
            if (inputwords != null) //如果没有输入文字,加判断
            {
                len = inputwords.length;//获取字符串的长度
            }
            float angle = 180;//设置文字的初始旋转角度
            
            float change = 0;
            if (len > 1) //一个字的需要特殊处理
            {
                change = 180 / (len - 1);
            }
            for (int i = 0; i < len; i++)//将文字以指定的弧度进行绘制
            {
                if (len > 1)
                {
                    //相当于把坐标系移动到了正中间
                    float x = (tem_line + circularity_w / 2) / 2;
                    float y = (tem_line + circularity_w / 2) / 2;
                    //将指定的平移添加到g的变换矩阵前         
                    g.translatetransform(x, y);
                    g.rotatetransform(angle);//将指定的旋转用于g的变换矩阵   
                    brush mybrush = brushes.red;//定义画刷
                    //需要注意,这时文字的位置的坐标位置是以新的坐标系为基础得到的
                    float words_x = tem_line / 2 - 6 * circularity_w;
                    float words_y = 0;
                    g.drawstring(inputwords.substring(i, 1), var_font, mybrush, words_x, words_y);//显示旋转文字
                    g.resettransform();//将g的全局变换矩阵重置为单位矩阵=>对应translatetransform,相当于恢复操作
                    angle += change;//设置下一个文字的角度
                }
                else
                {
                    //输入的文字为一个时候是特殊情况,单独考虑
                    float x = (tem_line + circularity_w / 2) / 2;
                    float y = (tem_line + circularity_w / 2) / 2;       
                    g.translatetransform(x, y);
                    g.rotatetransform(0);  
                    brush mybrush = brushes.red;
                    float words_x = -circularity_w*3;
                    float words_y = -(tem_line / 2 - 2 * circularity_w);
                    g.drawstring(inputwords.substring(i, 1), var_font, mybrush, words_x, words_y);
                    g.resettransform();
                }
                
            }
            #endregion
        }
        private void simplebutton2_click(object sender, eventargs e)
        {
            inputwords = textbox_文字.text;
            messagebox.show("保存成功!");
        }
#endregion
效果预览图:
   
 
   