C# Winforms转换

C# Winforms转换,c#,winforms,C#,Winforms,当前正在开发的应用程序有很多图形。图形的原点从底部的左侧开始,而不是从左侧的顶部开始。除了“DrawingString”之外,其他图形都可以完美地工作 我得到的结果是上下颠倒文本[![在此处输入图像描述][1][1] 我只想画普通文本,其余的绘图应该总是从左下角开始 编辑 private void panel1_Paint(object sender,PaintEventArgs e) { var g = e.Graphics; var heigh

当前正在开发的应用程序有很多图形。图形的原点从底部的左侧开始,而不是从左侧的顶部开始。除了“DrawingString”之外,其他图形都可以完美地工作

我得到的结果是上下颠倒文本[![在此处输入图像描述][1][1] 我只想画普通文本,其余的绘图应该总是从左下角开始

编辑

    private void panel1_Paint(object sender,PaintEventArgs e)
    {
        var g = e.Graphics;
        var height = panel1.Height;
        g.TranslateTransform(0,height);
        g.ScaleTransform(1,-1);
        g.DrawRectangle(new Pen(Brushes.Black,1),new Rectangle(10,10,100,100));
        g.DrawString("Test",new Font("Segoei UI",9),Brushes.Green,new Point(10,110));
    }
结果

我只希望文本被翻转。保持图形原样

再次翻转图形

请参见下面的示例。文本Sunday正常显示。然后我们转置图形对象的矩阵并写入星期一,使星期一在Y轴上横向反转,最后我们再次翻转Y轴,使其在写入正常显示的星期二之前恢复其原始状态

在代码中执行此操作,确保计算要显示文本的Y轴的值

g.ScaleTransform(1,-1);
g.DrawRectangle(new Pen(Brushes.Black,1),new Rectangle(10,10,100,100));

g.ScaleTransform(1,-1);
g.DrawString("Test",new Font("Segoei UI",9),Brushes.Green,new Point(10, -110));
再把它翻过来

请参见下面的示例。文本Sunday正常显示。然后我们转置图形对象的矩阵并写入星期一,使星期一在Y轴上横向反转,最后我们再次翻转Y轴,使其在写入正常显示的星期二之前恢复其原始状态

在代码中执行此操作,确保计算要显示文本的Y轴的值

g.ScaleTransform(1,-1);
g.DrawRectangle(new Pen(Brushes.Black,1),new Rectangle(10,10,100,100));

g.ScaleTransform(1,-1);
g.DrawString("Test",new Font("Segoei UI",9),Brushes.Green,new Point(10, -110));

垂直翻转(
ScaleTransform(1,-1)
)是问题的原因还是尝试修复的原因?您是否可以包含足够的代码以使其成为一个问题?现在的结果正是我所期望的。所以,你想翻转其他所有东西(“很多画”),但不翻转文本,对吗?。这可能是可能的,但我认为重新计算左上角系统的所有坐标会更容易、更可靠。@defaultlocale我正在parellel中使用一个非常旧的系统,该系统以这种方式执行绘图并以这种方式保存数据。我不能改变那些东西转换应该是X→ X和Y→高度-是垂直翻转(
ScaleTransform(1,-1)
)是您的问题或尝试修复的原因吗?您是否可以包含足够的代码使其成为一个问题?现在的结果正是我所期望的。所以,你想翻转其他所有东西(“很多画”),但不翻转文本,对吗?。这可能是可能的,但我认为重新计算左上角系统的所有坐标会更容易、更可靠。@defaultlocale我正在parellel中使用一个非常旧的系统,该系统以这种方式执行绘图并以这种方式保存数据。我不能改变那些东西转换应该是X→ X和Y→高度-Y感谢您对提供的代码所做的细微更改,完美地工作请勿使用CreateGraphics@TAW,是的,如果他在
Paint
事件中,他可以从事件args获取图形对象。我也会修改我的代码。谢谢你对你提供的代码做了一些小改动,效果很好。不要使用CreateGraphics@TAW,是的,如果他在
Paint
事件中,他可以从事件args获取图形对象。我也会更改代码。
g.ScaleTransform(1,-1);
g.DrawRectangle(new Pen(Brushes.Black,1),new Rectangle(10,10,100,100));

g.ScaleTransform(1,-1);
g.DrawString("Test",new Font("Segoei UI",9),Brushes.Green,new Point(10, -110));