矢量图标签绘制-字体倾斜角度设计-GDI+ 绘制倾斜字体

字体倾斜如何实现?用C#代码绘制矩形的示例如下:

    //假设待处理的矩形 长宽为
    var w = 120;
    var h = 60;
    //创建graphics
    graphics = pictureBox1.CreateGraphics(); ;//pictureBox1为界面中一个PictureBox控件
    graphics.Clear(Color.Gray);
    //原始位置
    //画出矩形中心点
    graphics.DrawEllipse(new Pen(Color.Red), new Rectangle(w / 2 - 2, h / 2 - 2, 4, 4));
    //画出矩形当前位置
    graphics.DrawRectangle(new Pen(Color.Red), new Rectangle(0, 0, w, h));
    //***第一步***
    //将graphics坐标原点移到矩形中心点
    graphics.TranslateTransform(w / 2, h / 2);
    //画出矩形当前位置
    graphics.DrawRectangle(new Pen(Color.Yellow), new Rectangle(0, 0, w, h));
    //***第二步***
    //graphics旋转相应的角度(绕当前原点)
    graphics.RotateTransform(angle);
    //画出矩形当前位置
    graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(0, 0, w, h));
    //***每三步***
    //恢复graphics在水平和垂直方向的平移(沿当前原点)
    graphics.TranslateTransform(-w / 2, -h / 2);
    //画出矩形当前位置
    graphics.DrawRectangle(new Pen(Color.Green), new Rectangle(0, 0, w, h));
    //重至绘图的所有变换
    graphics.ResetTransform();
    graphics.Save();
    //***结束***

矢量图如何显示倾斜标签

由于需要在矢量图上,进行标签绘制,标签字体位置,字体倾斜角度,如何设计,如何实现,经过分析,初步思路如下:

1、计算屏幕内的线
2、将标签的中心显示在线的中心位置
3、线中心位置,前后的线节点,计算的斜率,作为标签倾斜的斜率
4、根据中心点前后节点,计算直线方程,作为标签显示的初始直线方程
5、根据标签的长度,计算标签在直线方程上绘制的起始位置
6、将起始位置向直线的铅垂线方向移动一定距离,得到最终的绘制起始位置,以保证标签全部在线的上方
7、将画布的起始坐标移动到标签绘制的最终起始位置
8、设置画布旋转角度为直线斜率
9、在画布的起始位置(0,0)点开始绘制标签
10、绘制完成之后,将画布的起始位置返回到原始(0,0)位置
11、重至绘图的所有变换,标签绘制完成

根据以上思路,完成的绘制结果如下(欢迎提供宝贵建议):
 


 

 

你可能感兴趣的:(算法,C++)