翻译/旋转以前绘制的矩形,这可能吗?

时间:2015-03-02 05:21:57

标签: c# text rotation drawing

我有一个带文本的bmp,​​为了便于访问,bmp根据用户选项进行相应的旋转。问题:图像旋转时文本会反转。 (只有严格的角度,90,180等)

可能的解决方案: 将文本旋转180º然后使用常规旋转,以便它不会被镜像?

我按照以下方式尝试了这个,我在文本周围创建一个矩形并转动它。

    Rectangle r1 = new Rectangle((int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25, 25, 12);
            using (Matrix m = new Matrix())
            {

                m.RotateAt(180, new PointF((int)(ecobdesenho / 10) / 2 + esp - 15 + (25 / 2),
                                          esp - 25 + (12 / 2)));


                 g.Transform = m;
                 g.DrawRectangle(new Pen(Color.Black), r1);
                 g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima

                g.ResetTransform();
            }

然后,我在bmp之前为其提供旋转:

            g.TranslateTransform((float)(xWcorrigido / 2 + esp), (float)(yWcorrigido / 2 + esp));
            g.RotateTransform(180);
            g.TranslateTransform((float)(-xWcorrigido / 2 - esp), (float)(-yWcorrigido / 2 - esp)); 

但是这种组合不会影响之前的文字。我试图将它放在使用矩阵括号内,但无论如何,它都不适用于整个转换过程。

我也可以,首先使用一般翻译,然后在非常具体的方框中翻转文本,但它会提供相同数量的工作,我试图避免。

任何提示?我的大脑已经因为这么多可能的组合而受伤

1 个答案:

答案 0 :(得分:0)

解决方案是在矩阵内应用变换,对矩阵应用,如下所示:

        Rectangle r1 = new Rectangle((int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25, 25, 12);
        using (Matrix m = new Matrix())
        {  
            m.TranslateTransform((float)(xWcorrigido / 2 + esp), (float)(yWcorrigido / 2 + esp));
            m.RotateTransform(180);
            m.TranslateTransform((float)(-xWcorrigido / 2 - esp), (float)(-yWcorrigido / 2 - esp)); 

            m.RotateAt(180, new PointF((int)(ecobdesenho / 10) / 2 + esp - 15 + (25 / 2),
                                      esp - 25 + (12 / 2)));


             g.Transform = m;
             g.DrawRectangle(new Pen(Color.Black), r1);
             g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima

            g.ResetTransform();
        }