GDI绘画自定(定义字数、多行文字、矩形、C#编程素描^_^)

自定义绘制路由图:第一步

<p>        private void GDI绘画自定(PaintEventArgs 绘图容器, List<List<string>> 文本集, int 字量, int 字号, Color 颜色)
        {
            int[] 增 = new int[2]; string[] 内容 = new string[2];
            foreach (List<string> 文本组 in 文本集)
            {
                字符串换行处理(out 内容[0], out 增[0], 文本组[0], 字量);
                字符串换行处理(out 内容[1], out 增[1], 文本组[1], 字量);
            }
            float x容器左距 = 10.0F, y容器上距 = 10.0F, 微调 = (字量 >= 6) ? 0 : (字号 - 字量) * 0.006F,
                  k矩宽 = 字量 * 字号 * (1.45F + 微调), 标题高 = (增[0] + 1) * 字号 * (1.45F + 微调), 内容高 = (增[1] + 1) * 字号 * (1.45F + 微调);
            Pen 线条颜色 = new Pen(Color.Lime, 1);
            绘图容器.Graphics.DrawRectangle(线条颜色, x容器左距, y容器上距, k矩宽, 标题高);/*矩形高宽字数字号乘以系数+微调*/
            绘图容器.Graphics.FillRectangle(new SolidBrush(Color.Lavender), x容器左距, y容器上距, k矩宽, 标题高);
            绘图容器.Graphics.DrawString(内容[0], new Font("隶书", 字号), new SolidBrush(颜色), new PointF(x容器左距, y容器上距));
            float 线条X = x容器左距 + k矩宽, 线条Y = y容器上距 + 标题高 / 2;
            绘图容器.Graphics.DrawLine(new Pen(Color.Lime, 3), 线条X, 线条Y, 线条X + 88, 线条Y);/*线条*/
            绘图容器.Graphics.DrawRectangle(线条颜色, x容器左距, y容器上距 + 标题高, k矩宽, 内容高);
            绘图容器.Graphics.DrawString(内容[1], new Font("宋体", 字号), new SolidBrush(颜色), new PointF(x容器左距, y容器上距 + 标题高));
            绘图容器.Graphics.DrawIcon(资源文件.冰激凌, (int)线条X + 88, (int)线条Y - 资源文件.冰激凌.Height / 2);/*图像*/
            RectangleF[] 线条组 = new RectangleF[]/*加以下代码您看到什么了?哈哈......!*/
            { 
                new RectangleF((线条X + 88), 20F, 175F, 200F),
                new RectangleF((线条X + 120), 100F, 35F, 18F),
                new RectangleF((线条X + 200), 100F, 35F, 18F),
                new RectangleF((线条X + 130), 100F, 18F, 18F),
                new RectangleF((线条X + 207), 100F, 18F, 18F),
                new RectangleF((线条X + 136), 106F, 6F, 6F),
                new RectangleF((线条X + 213), 106F, 6F, 6F),
                new RectangleF((线条X + 120), 160F, 4F, 4F),
                new RectangleF((线条X + 230), 160F, 4F, 4F),
                new RectangleF((线条X + 185), 60F, 4F, 4F),
                new RectangleF((线条X + 185), 50F, 4F, 4F),
                new RectangleF((线条X + 185), 40F, 4F, 4F),
                new RectangleF((线条X + 175), 60F, 4F, 4F),
                new RectangleF((线条X + 175), 50F, 4F, 4F),
                new RectangleF((线条X + 175), 40F, 4F, 4F),
                new RectangleF((线条X + 165), 60F, 4F, 4F),
                new RectangleF((线条X + 165), 50F, 4F, 4F),
                new RectangleF((线条X + 165), 40F, 4F, 4F)
            };
            foreach (RectangleF 线元 in 线条组) 绘图容器.Graphics.DrawArc(线条颜色, 线元, 0.0F, 360.0F);/*圆*/
            RectangleF[] 线条组1 = new RectangleF[] 
            { 
                new RectangleF((线条X + 160), 150F, 10F, 15F),
                new RectangleF((线条X + 180), 150F, 10F, 15F),
                new RectangleF((线条X + 198), 85F, 45F, 20F),
                new RectangleF((线条X + 112), 85F, 45F, 20F),
                new RectangleF((线条X + 158), 190F, 35F, 20F)
            };
            foreach (RectangleF 线元 in 线条组1) 绘图容器.Graphics.DrawArc(线条颜色, 线元, 180.0F, 180.0F);
            RectangleF[] 线条组2 = new RectangleF[] 
            { 
                new RectangleF((线条X + 170), 150F, 10F, 8F),
                new RectangleF((线条X + 145), 160F, 60F, 20F)
            };
            foreach (RectangleF 线元 in 线条组2) 绘图容器.Graphics.DrawArc(线条颜色, 线元, 0.0F, 180.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 155), 142F, 10F, 15F, 90.0F, 180.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 185), 142F, 10F, 15F, 270.0F, 180.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 255), 95F, 15F, 80F, 240.0F, 260.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 255), 115F, 8F, 20F, 210.0F, 280.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 82), 95F, 15F, 80F, 50.0F, 240.0F);
            绘图容器.Graphics.DrawArc(线条颜色, (线条X + 89), 115F, 8F, 20F, 60.0F, 290.0F);
        }</p>

字符串换行处理;资源文件.字符检测[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -[]()<>&=:@{}~!#$%^/.]

        void 字符串换行处理(out string 文本, out int 增, string 字符串, int 字量)
        {
            int 数 = 0, 量 = 0; 增 = 0;
            foreach (char 字元 in 字符串)
            {
                ++数; 量 += (资源文件.字符检测.Contains(字元.ToString())) ? 1 : 2;
                if (字量 * 2 <= 量)/*字数换行:支持中英文混合,其他国家文字按像素比例调整*/
                {
                    字符串 = 字符串.Insert(数 + 增 - ((量 % 2 == 1) ? 1 : 0), "\n");
                    ++增; 量 = (量 % 2 == 1) ? 2 : 0;
                }
            }
            文本 = (字符串 == "") ? "暂无内容" : 字符串;
            if (增 > 0) if (字符串.Substring(字符串.LastIndexOf("\n")).Length == 1) --增;
        }

测试:指定字数、字号、颜色

        private void 五行农历容器_Paint(object sender, PaintEventArgs e)
        {
            List<List<string>> 字符组 = new List<List<string>>();
            字符组.Add(new string[] { "标题内容", "内容字数换行:支持中英文混合,其他国家文字按像素比例调整" }.ToList());
            GDI绘画自定(e, 字符组, 6, 12, Color.Red);
        }

第二步:完成横向连贯动态画。

        private void GDI绘画自定(PaintEventArgs 绘图容器, List<List<string>> 文本集, int 字量, int 字号, Color 颜色)
        {
            int[] 增 = Enumerable.Repeat<int>(0, 2).ToArray();
            string[] 内容 = Enumerable.Repeat<string>("", 2).ToArray();
            Pen 线条颜色 = new Pen(Color.Lime, 1);
            float[] 线条位置 = Enumerable.Repeat<float>(10.0F, 4).ToArray();/*矩形高宽字数字号乘以系数+微调*/
            线条位置[2] = 88.0F; 线条位置[3] = 字号 * (1.45F + ((字量 >= 6) ? 0 : (字号 - 字量) * 0.006F));
            List<List<object>> 位置集 = new List<List<object>>();
            foreach (List<string> 文本组 in 文本集)
            {
                字符串换行处理(out 内容[0], out 增[0], 文本组[0], 字量);
                字符串换行处理(out 内容[1], out 增[1], 文本组[1], 字量);/*x左距, y上距, 矩宽, 标题高, 内容高, 线条X, 线条Y*/
                位置集.Add(new object[] { 线条位置[0], 线条位置[1], 字量 * 线条位置[3], (增[0] + 1) * 线条位置[3], (增[1] + 1) * 线条位置[3], 线条位置[0] + 字量 * 线条位置[3], 线条位置[1] + (增[0] + 1) * 线条位置[3] / 2, 内容[0], 内容[1] }.ToList());
                线条位置[0] = 线条位置[0] + 字量 * 线条位置[3] + 线条位置[2];
            }
            foreach (List<object> 值元 in 位置集)
            {
                绘图容器.Graphics.DrawRectangle(线条颜色, (float)值元[0], (float)值元[1], (float)值元[2], (float)值元[3]);
                绘图容器.Graphics.FillRectangle(new SolidBrush(Color.Lavender), (float)值元[0], (float)值元[1], (float)值元[2], (float)值元[3]);/*填充*/
                绘图容器.Graphics.DrawString((string)值元[7], new Font("隶书", 字号), new SolidBrush(颜色), new PointF((float)值元[0], (float)值元[1]));
                绘图容器.Graphics.DrawRectangle(线条颜色, (float)值元[0], (float)值元[1] + (float)值元[3], (float)值元[2], (float)值元[4]);
                绘图容器.Graphics.DrawString((string)值元[8], new Font("宋体", 字号), new SolidBrush(颜色), new PointF((float)值元[0], (float)值元[1] + (float)值元[3]));
                绘图容器.Graphics.DrawLine(new Pen(Color.Lime, 3), (float)值元[5], (float)值元[6], (float)值元[5] + 线条位置[2], (float)值元[6]);/*线条*/
            }
            Icon 用户头像 = 资源文件.冰激凌;
            绘图容器.Graphics.DrawIcon(用户头像, (int)(float)位置集[位置集.Count - 1][5] + (int)线条位置[2], (int)(float)位置集[位置集.Count - 1][6] - 用户头像.Height / 2);/*图像*/
        }

测试:1、2、3图示

        private void 五行农历容器_Paint(object sender, PaintEventArgs e)
        {
            List<List<string>> 字符组 = new List<List<string>>();
            字符组.Add(new string[] { "标题内容123内容", "祝福一切有情万福安康!《ado.net学习与实践》" }.ToList());
            字符组.Add(new string[] { "标题内容123内容", "祝福一切有情万福安康!《ado.net学习与实践》" }.ToList());
            字符组.Add(new string[] { "标题内容123内容", "祝福一切有情万福安康!《ado.net学习与实践》" }.ToList());
            GDI绘画自定(e, 字符组, 6, 12, Color.Red);
            //曲线素描(e);
        }


矩形大小在不同分辨率显示器上需调整系数。

使用创建的控件作为画布,如果创建DataGridView则不用写一字代码就可以支持鼠标滚轮滚动条。

Panel 绘图容器 = new Panel();
        private void Form1_Load(object sender, EventArgs e)
        {
            绘图容器.Paint += new PaintEventHandler(绘图容器_Paint);
            绘图容器.Parent = 五行农历容器;
            绘图容器.Height = 五行农历容器.Height - 20;
            绘图容器.BackColor = Color.Transparent;
        }
绘图容器.Width = (int)线条位置[0] + 用户头像.Width;

以上 当画布宽度超过停靠容器时出现滚动条,但不能随鼠标滚轮滚动,可以拖动。

        private void 五行农历容器_Paint(object sender, PaintEventArgs e)
        {
            Pen 线条颜色 = new Pen(Color.Lime, 1);
            RectangleF[] 线条组 = new RectangleF[]/*加以下代码您看到什么了?哈哈......!*/
            { 
                new RectangleF(288F, 120F, 175F, 200F),
                new RectangleF(320F, 200F, 35F, 18F),
                new RectangleF(400F, 200F, 35F, 18F),
                new RectangleF(330F, 200F, 18F, 18F),
                new RectangleF(407F, 200F, 18F, 18F),
                new RectangleF(336F, 206F, 6F, 6F),
                new RectangleF(413F, 206F, 6F, 6F),
                new RectangleF(320F, 260F, 4F, 4F),
                new RectangleF(430F, 260F, 4F, 4F),
                new RectangleF(368F, 150F, 20F, 15F),
                new RectangleF(375F, 190F, 4F, 4F)
            };
            foreach (RectangleF 线元 in 线条组) e.Graphics.DrawArc(线条颜色, 线元, 0.0F, 360.0F);/*圆*/
            RectangleF[] 线条组1 = new RectangleF[] 
            { 
                new RectangleF(360F, 250F, 10F, 15F),
                new RectangleF(380F, 250F, 10F, 15F),
                new RectangleF(398F, 185F, 45F, 20F),
                new RectangleF(312F, 185F, 45F, 20F)
            };
            foreach (RectangleF 线元 in 线条组1) e.Graphics.DrawArc(线条颜色, 线元, 180.0F, 180.0F);
            RectangleF[] 线条组2 = new RectangleF[] 
            { 
                new RectangleF(370F, 250F, 10F, 8F),
                new RectangleF(345F, 260F, 60F, 20F),
                new RectangleF(358F, 295F, 35F, 20F)
            };
            foreach (RectangleF 线元 in 线条组2) e.Graphics.DrawArc(线条颜色, 线元, 0.0F, 180.0F);
            e.Graphics.DrawArc(线条颜色, 355F, 242F, 10F, 15F, 90.0F, 180.0F);
            e.Graphics.DrawArc(线条颜色, 385F, 242F, 10F, 15F, 270.0F, 180.0F);
            e.Graphics.DrawArc(线条颜色, 455F, 195F, 15F, 80F, 240.0F, 260.0F);
            e.Graphics.DrawArc(线条颜色, 455F, 215F, 8F, 20F, 210.0F, 280.0F);
            e.Graphics.DrawArc(线条颜色, 282F, 195F, 15F, 80F, 50.0F, 240.0F);
            e.Graphics.DrawArc(线条颜色, 289F, 215F, 8F, 20F, 60.0F, 290.0F);
        }

来个美图看看 

                e.Graphics.DrawImage(资源文件.花25, new Rectangle((int)(float)值元[0], (int)(float)值元[1], (int)(float)值元[2], (int)(float)值元[3]));/*指定大小*/
                e.Graphics.DrawString((string)值元[7], new Font("隶书", 字号), new SolidBrush(颜色), new PointF((float)值元[0], (float)值元[1]));
                e.Graphics.DrawImage(资源文件.花16, new Rectangle((int)(float)值元[0], (int)(float)值元[1] + (int)(float)值元[3], (int)(float)值元[2], (int)(float)值元[4]));
                e.Graphics.DrawString((string)值元[8], new Font("宋体", 字号), new SolidBrush(颜色), new PointF((float)值元[0], (float)值元[1] + (float)值元[3]));
                e.Graphics.DrawImage(资源文件.箭头3, new Rectangle((int)(float)值元[5], (int)(float)值元[6], (int)(float)值元[2], 8));


下面转录2个例子:

<p>        void 绘制剖面图(Graphics 绘图面, float 绘制位置x, float 绘制位置y, float 同心圆半径, float 内层同心圆偏移角度, int 同心圆层数)
        {
            for (int i = 1; i <= 同心圆层数; i++)
            {
                float A = 内层同心圆偏移角度 / i;
                int count = (int)Math.Round(360 / A);
                for (int j = 0; j < count; j++)
                {
                    float R = 同心圆半径 * i;
                    float rx = (float)Math.Cos(A * Math.PI / 180 * j) * R + 绘制位置x;
                    float ry = (float)Math.Sin(A * Math.PI / 180 * j) * R + 绘制位置y;</p><p>                    RectangleF bound = new RectangleF(rx, ry, 同心圆半径, 同心圆半径);</p><p>                        绘图面.FillEllipse(new SolidBrush(Color.LightGray), bound);
                        绘图面.DrawEllipse(new Pen(Color.Black, 1), bound);</p><p>                    bound.Inflate(-同心圆半径 / 4, -同心圆半径 / 4);</p><p>                        绘图面.FillEllipse(new SolidBrush(Color.Gold), bound);
                        绘图面.DrawEllipse(new Pen(Color.Black, 1), bound);
                }
            }
        }
        void 生成电子印章(Graphics 绘图面, string 印章文字, PointF 印章中心点, float 印章半径, float 印章文字分布角度, int 五星半径)
        {
            int 字数 = 印章文字.Length;
            Font 字体 = new Font("隶书", 20f);
            绘图面.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            SizeF 文字大小 = 绘图面.MeasureString(印章文字[0].ToString(), 字体);//文字大小 = SizeF.Empty;
            //外圆
            绘图面.DrawEllipse(new Pen(Color.Red, 5),
                   new RectangleF(印章中心点.X - 印章半径 - 文字大小.Width / 2,
                   印章中心点.Y - 印章半径 - 文字大小.Width / 2, 印章半径 * 2 + 文字大小.Width, 印章半径 * 2 + 文字大小.Height));
            //绘制印章文字
            for (int i = 0; i < 字数; i++)
            {                                        /*-90*/
                float 转换角 = ((印章文字分布角度 / 2 + 90) - i * (印章文字分布角度 / (字数 - 1)));
                float 转换角x = (float)Math.Cos((-1) * 转换角 * Math.PI / 180) * (印章半径 - 8) + 印章中心点.X;
                float 转换角y = (float)Math.Sin((-1) * 转换角 * Math.PI / 180) * (印章半径 - 8) + 印章中心点.Y;
                //先平移再旋转
                绘图面.ResetTransform();
                绘图面.TranslateTransform(转换角x, 转换角y);
                绘图面.RotateTransform(180 - 转换角);
                文字大小 = 绘图面.MeasureString(印章文字[i].ToString(), 字体);
                绘图面.DrawString(印章文字[字数 - i - 1].ToString(), 字体, Brushes.Red, -文字大小.Width / 2, -文字大小.Height / 2);
                                          /*文字出现顺序*/
            }</p><p>            List<PointF> 多边组 = new List<PointF>();
            foreach (int 点 in new int[] { 2, 4, 1, 3, 0 })
            {
                float 定点 = (54 + 72 * 点) * (float)Math.PI / 180;
                多边组.Add(new PointF((float)Math.Cos(定点) * 五星半径, (float)Math.Sin(定点) * 五星半径));
            }
            绘图面.ResetTransform();
            绘图面.TranslateTransform(印章中心点.X, 印章中心点.Y);
            绘图面.RotateTransform(360);
            绘图面.FillPolygon(Brushes.Red, 多边组.ToArray(), System.Drawing.Drawing2D.FillMode.Winding);
        }</p>

调用:

//绘制剖面图(e.Graphics, 320, 420, 20, 60, 11);

生成电子印章(e.Graphics, "极乐世界阿弥陀佛", new PointF(ClientRectangle.Width / 2, ClientRectangle.Height / 2), 80, 220, 20);

//实现思路主要是根据印章文字计算每个字体的偏移角度,求出它的偏移位置进行平移,再根据相应的角度进行旋转,注意的地方就是GDI+坐标与笛卡尔坐标不一样,旋转的时候就要转换一下

        void 素描罗盘八卦(PaintEventArgs e)
        {
            Pen 线条颜色 = new Pen(Color.Lime, 1), 线条颜色1 = new Pen(Color.Lime, 6), 线条颜色2 = new Pen(Color.Black, 6);
            Font 字体 = new Font("隶书", 14f);
            int 计数 = 0; List<int> 度数 = new List<int>();
            string[] 文字 = new string[] { "水坎", "山艮", "地坤", "雷震", "火离", "泽兑", "天乾", "风巽" };
            SizeF 文字大小 = e.Graphics.MeasureString(文字[0], 字体);//文字大小 = SizeF.Empty;
            Single 起始角 = (360 / 文字.Length) / 2F + 5F / 2F;
            Single[] 角集 = new Single[] { 起始角, 起始角 + 45 * 1, 起始角 + 45 * 2, 起始角 + 45 * 3, 起始角 + 45 * 4, 起始角 + 45 * 5, 起始角 + 45 * 6, 起始角 + 45 * 7, };
            Single[] 位置大小 = new Single[] { 100F, 300F };
            e.Graphics.DrawEllipse(线条颜色, new RectangleF(位置大小[0], 位置大小[0], 位置大小[1], 位置大小[1]));/*圆*/
            
            Parallel.Invoke(() =>
            {
                for (int 刻度 = 0; 刻度 < 360; 刻度 += 5)
                {
                    float 位置x = (float)Math.Cos(刻度 * Math.PI / 180) * 位置大小[0] * 1.5F + (位置大小[0] + 位置大小[1] / 2);
                    float 位置y = (float)Math.Sin(刻度 * Math.PI / 180) * 位置大小[0] * 1.5F + (位置大小[0] + 位置大小[1] / 2);
                    float 位置2 = (刻度 % 10 == 0) ? 位置大小[0] * 1.5F + 5 : 位置大小[0] * 1.5F - 5;
                    float 位置x2 = (float)Math.Cos(刻度 * Math.PI / 180) * 位置2 + (位置大小[0] + 位置大小[1] / 2);
                    float 位置y2 = (float)Math.Sin(刻度 * Math.PI / 180) * 位置2 + (位置大小[0] + 位置大小[1] / 2);
                    e.Graphics.DrawLine(线条颜色, 位置x, 位置y, 位置x2, 位置y2); 度数.Add(刻度);
                } 
                foreach (float 角元 in new float[] { 角集[0], 角集[3], 角集[5], 角集[6] })
                    e.Graphics.DrawArc(线条颜色1, new RectangleF(位置大小[0] * 1.5F, 位置大小[0] * 1.5F, 位置大小[1] - 100F, 位置大小[1] - 100F), 角元, 40.0F);/*外弧*/
                foreach (float 角元 in new float[] { 角集[4], 角集[5], 角集[6], 角集[7] })
                    e.Graphics.DrawArc(线条颜色1, new RectangleF(位置大小[0] * 1.6F, 位置大小[0] * 1.6F, 位置大小[1] - 120F, 位置大小[1] - 120F), 角元, 40.0F);/*中弧*/
                foreach (float 角元 in new float[] { 角集[2], 角集[3], 角集[4], 角集[5] })
                    e.Graphics.DrawArc(线条颜色1, new RectangleF(位置大小[0] * 1.7F, 位置大小[0] * 1.7F, 位置大小[1] - 140F, 位置大小[1] - 140F), 角元, 40.0F);/*内弧*/
                foreach (float 角元 in new float[] { 角集[1], 角集[2], 角集[4], 角集[7] })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.5F, 位置大小[0] * 1.5F, 位置大小[1] - 100F, 位置大小[1] - 100F), 角元, 19.5F);/*外弧*/
                foreach (float 角元 in new float[] { 角集[0], 角集[1], 角集[2], 角集[3] })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.6F, 位置大小[0] * 1.6F, 位置大小[1] - 120F, 位置大小[1] - 120F), 角元, 19.5F);/*中弧*/
                foreach (float 角元 in new float[] { 角集[0], 角集[1], 角集[6], 角集[7] })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.7F, 位置大小[0] * 1.7F, 位置大小[1] - 140F, 位置大小[1] - 140F), 角元, 19.5F);/*内弧*/
                foreach (float 角元 in new float[] { 角集[1] + 20.5F, 角集[2] + 20.5F, 角集[4] + 20.5F, 角集[7] + 20.5F })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.5F, 位置大小[0] * 1.5F, 位置大小[1] - 100F, 位置大小[1] - 100F), 角元, 19.5F);/*外弧*/
                foreach (float 角元 in new float[] { 角集[0] + 20.5F, 角集[1] + 20.5F, 角集[2] + 20.5F, 角集[3] + 20.5F })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.6F, 位置大小[0] * 1.6F, 位置大小[1] - 120F, 位置大小[1] - 120F), 角元, 19.5F);/*中弧*/
                foreach (float 角元 in new float[] { 角集[0] + 20.5F, 角集[1] + 20.5F, 角集[6] + 20.5F, 角集[7] + 20.5F })
                    e.Graphics.DrawArc(线条颜色2, new RectangleF(位置大小[0] * 1.7F, 位置大小[0] * 1.7F, 位置大小[1] - 140F, 位置大小[1] - 140F), 角元, 19.5F);/*内弧*/
                foreach (string 字元 in 文字)
                {
                    float 转换角 = (计数 * (360 / 文字.Length));
                    float 转换角x = (float)Math.Cos(转换角 * Math.PI / 180) * 位置大小[0] * 1.12F + (位置大小[0] + 位置大小[1] / 2);
                    float 转换角y = (float)Math.Sin(转换角 * Math.PI / 180) * 位置大小[0] * 1.12F + (位置大小[0] + 位置大小[1] / 2);
                    e.Graphics.ResetTransform();
                    e.Graphics.TranslateTransform(转换角x, 转换角y);
                    e.Graphics.RotateTransform(90 + 转换角);
                    e.Graphics.DrawString(字元, 字体, Brushes.Red, -文字大小.Width / 2, -文字大小.Height / 2);
                    计数++;
                }
                计数 = 0;
                foreach (int 字元 in 度数)
                {
                    float 位置2 = (计数 % 2 == 0) ? 位置大小[0] * 1.8F : 位置大小[0] * 1.5F;
                    float 转换角 = (计数 * (360 / 度数.Count)) + 2.5F;
                    float 转换角x = (float)Math.Cos(转换角 * Math.PI / 180) * 位置2 + (位置大小[0] + 位置大小[1] / 2);
                    float 转换角y = (float)Math.Sin(转换角 * Math.PI / 180) * 位置2 + (位置大小[0] + 位置大小[1] / 2);
                    e.Graphics.ResetTransform();
                    e.Graphics.TranslateTransform(转换角x, 转换角y);
                    e.Graphics.RotateTransform(转换角);
                    e.Graphics.DrawString(字元.ToString("000"), new Font("隶书", 6.8F), Brushes.Red, -文字大小.Width / 2, -文字大小.Height / 2);
                    计数++;
                }
            });
        }

在 GDI+ 中绘制、定位和克隆图像  图像重绘
 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值