Graphics画图转置 特殊字符位置跑到行前

金大哈 2016-08-26 03:23:07
http://bbs.csdn.net/topics/392009486

上面的帖子是我发的关于Graphics画图转置 的问题,
已经实现想要的效果


但是存在一个问题,就是如果字符串的结尾是( 、) 、. 等特殊字符时

这个就自动跑到这一行的最前端



如上图所示

红色框子部分的括弧 应该是在他的最上方成对 的,但是一转就下来了 ,不知什么情况



如果下方已经有了括弧,上方的就不会下来

求大神解答
...全文
225 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
金大哈 2016-09-06
  • 打赏
  • 举报
回复
引用 8 楼 crystal_lz 的回复:
TextRenderingHint 有好几个值 你都试试 至于为什么会出现这样的情况 我也不知道 没有研究过 也没有遇到过这样的需求 偶尔需要竖着绘制 也只是简单的几个文字而已 所以没有遇到过这样的问题 不过退一万不讲 你还有一个 很low的办法 那就是 横着把文字绘制到一个 bmp上 然后再旋转坐标绘制bmp我特么就不信了 还出问题
我现在就是这么做的 ,没有这些特殊字符的就用代码翻转的
crystal_lz 2016-08-30
  • 打赏
  • 举报
回复
TextRenderingHint 有好几个值 你都试试 至于为什么会出现这样的情况 我也不知道 没有研究过 也没有遇到过这样的需求 偶尔需要竖着绘制 也只是简单的几个文字而已 所以没有遇到过这样的问题 不过退一万不讲 你还有一个 很low的办法 那就是 横着把文字绘制到一个 bmp上 然后再旋转坐标绘制bmp我特么就不信了 还出问题
金大哈 2016-08-30
  • 打赏
  • 举报
回复
引用 2 楼 crystal_lz 的回复:
测试确实可以,但是一放到报表的表头上,括弧又自动下来了 晕菜啊
金大哈 2016-08-30
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            var g = e.Graphics;
            //g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
            using (var path = new GraphicsPath())
            {
                path.AddString("examined(mm)\r\nF(mm)", Font.FontFamily, 1, 24, new Point(10, 80), new StringFormat());
                g.FillPath(Brushes.Blue, path);
                path.Transform(GetMatrix(270, 10, 80, 0, 80));
                g.FillPath(Brushes.Red, path);
            }
        }
        Matrix GetMatrix(double angle, int a=0, int b=0, int mx = 0, int my = 0)
        {
            var n = angle / 180 * Math.PI;
            var n1 = (float)Math.Cos(n);
            var n2 = (float)Math.Sin(n);
            var n3 = (float)-Math.Sin(n);
            var n4 = (float)Math.Cos(n);
            return new Matrix(n1, n2, n3, n4, a * (1 - n1) + b * n2 + mx, b * (1 - n4) + a * n3 + my);
        }
字体小了 !好像变形有点严重啊
xuzuning 2016-08-26
  • 打赏
  • 举报
回复
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            var g = e.Graphics;
            //g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
            using (var path = new GraphicsPath())
            {
                path.AddString("examined(mm)\r\nF(mm)", Font.FontFamily, 1, 24, new Point(10, 80), new StringFormat());
                g.FillPath(Brushes.Blue, path);
                path.Transform(GetMatrix(270, 10, 80, 0, 80));
                g.FillPath(Brushes.Red, path);
            }
        }
        Matrix GetMatrix(double angle, int a=0, int b=0, int mx = 0, int my = 0)
        {
            var n = angle / 180 * Math.PI;
            var n1 = (float)Math.Cos(n);
            var n2 = (float)Math.Sin(n);
            var n3 = (float)-Math.Sin(n);
            var n4 = (float)Math.Cos(n);
            return new Matrix(n1, n2, n3, n4, a * (1 - n1) + b * n2 + mx, b * (1 - n4) + a * n3 + my);
        }
金大哈 2016-08-26
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
其实这个应使用路径(GraphicsPath)和 仿射矩阵(Matrix)来控制 精确度高且计算简单直观
能弄一个简单的代码 谢谢
xuzuning 2016-08-26
  • 打赏
  • 举报
回复
其实这个应使用路径(GraphicsPath)和 仿射矩阵(Matrix)来控制
精确度高且计算简单直观

crystal_lz 2016-08-26
  • 打赏
  • 举报
回复
Poopaye 2016-08-26
  • 打赏
  • 举报
回复
目测是因为你设置了DirectionRightToLeft

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧