我有一个带文本的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));
但是这种组合不会影响之前的文字。我试图将它放在使用矩阵括号内,但无论如何,它都不适用于整个转换过程。
我也可以,首先使用一般翻译,然后在非常具体的方框中翻转文本,但它会提供相同数量的工作,我试图避免。
任何提示?我的大脑已经因为这么多可能的组合而受伤
答案 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();
}