我对坐标系做了如下旋转
Graphics gs = Graphics.FromImage(myBitmap);
System.Drawing.Drawing2D.Matrix myMatrix = new System.Drawing.Drawing2D.Matrix(1, 0, 0, -1, 0, 0);
gs.Transform = myMatrix;
gs.TranslateTransform(20, 220, System.Drawing.Drawing2D.MatrixOrder.Append);旋转后画的文字是倒的,请问怎么画出正常的文字呢?

解决方案 »

  1.   

    用聚阵旋转后原坐标点也被旋转到另个位置了.你可以用这样的:
    myBitmap.Rote(90度)
    然后再绘制文字,这是图片本身旋转,坐标系不变化.
      

  2.   

    我是对坐标系旋转了后,绘制了图形后再绘制文字的。 Graphics gs = Graphics.FromImage(myBitmap); 
    System.Drawing.Drawing2D.Matrix myMatrix = new System.Drawing.Drawing2D.Matrix(1, 0, 0, -1, 0, 0); 
    gs.Transform = myMatrix; 
    gs.TranslateTransform(20, 220, System.Drawing.Drawing2D.MatrixOrder.Append); gs.FillRectangle(new SolidBrush(Color.FromArgb(153, 153, 255)), f1, 0, f3, f2);
    gs.DrawString("666",..........
    这样绘制出的文字是被垂直翻转过的,"666"看起来就变成了"999"
      

  3.   

    gs.DrawString("666",..........
    gs.Transform = myMatrix;
    ……
    调整下位置试试。 
      

  4.   

    旋转不能旋转坐标系,只是通过对目标点乘以一个仿射矩阵来得到新的点的位置.GDI中的坐标系和数学上一般的坐标系不同,X轴越往右越大,Y轴越往下越大.仿射3*3矩阵中左上方的2*2矩阵表示旋转度数和拉伸倍数,表示为:
     xcos(n), ysin(n)
    -xsin(n), ycos(n)
    (
    x代表x轴的拉伸倍数,y代表y轴拉伸倍数,n代表顺时针旋转弧度,且这里拉伸是在旋转后,若拉伸后再旋转,则为:
     xcos(n), xsin(n)
    -ysin(n), ycos(n)
    )
    仿射3*3矩阵中第3行前2列代表点移动位置,如为(1,2)则代表点向右移动1象素,向下移动2象素.仿射3*3矩阵为了把拉伸旋转与点移动通过矩阵变换和为一个矩阵而产生的.其第3列恒为(0,0,1),对应的坐标系中的点为(a,b,1)  (a,b为二维坐标系中的点)如(a,b,1)与矩阵
     xcos(n), ysin(n),0
    -xsin(n), ycos(n),0
     mx     , my     ,1
    相乘代表将点(a,b)顺时针旋转N度后,在x轴上拉伸x倍,y轴拉伸y倍,最后向右移动mx象素,向下移动my象素因为旋转时都是以坐标原点(即点0,0)旋转的,所以若要以某一坐标点旋转,则要先将坐标点移到原点,旋转后再移回去,比如以点a,b进行旋转拉伸,则所乘矩阵为:
     1, 0,0        xcos(n), ysin(n),0       1,0,0
     0, 1,0   *   -xsin(n), ycos(n),0   *   0,1,0
    -a,-b,1           0   ,   0    ,1       a,b,1
    结果为矩阵:
                xcos(n)     ,          ysin(n)          ,0
               -xsin(n)     ,          ycos(n)          ,0 
    a*(1-x*cos(n))+b*x*sin(n), (1-y*cos(n))*b-a*y*sin(n)),1
      

  5.   

    楼主的矩阵是将y轴倒置,比如(x,y)点变换后就成了(x,-y)点了,正好关于(x,0)点对称,画出来的当然是倒置的
      

  6.   

    那我想画一个这样的坐标该如何画呢??
    y^
     |
     |
     |
     |
     |
     | 
     |_____________________________________________>  X
       一月  二月 三月 四月 五月 .........
      

  7.   

    对于Y轴向上的坐标系,要先定好在界面坐标系中的原点,比如可以取(0,y)为Y轴向上的坐标系原点,这样Y轴向上坐标系中点(a,b)在界面中的点就是(a,y-b),同理,界面中的点(a,b)在以(0,y)为原点的Y轴向上坐标系中的点也是(a,y-b)
    两个坐标系中的点这样转换就可以了