我对坐标系做了如下旋转
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);旋转后画的文字是倒的,请问怎么画出正常的文字呢?
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);旋转后画的文字是倒的,请问怎么画出正常的文字呢?
myBitmap.Rote(90度)
然后再绘制文字,这是图片本身旋转,坐标系不变化.
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"
gs.Transform = myMatrix;
……
调整下位置试试。
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
y^
|
|
|
|
|
|
|_____________________________________________> X
一月 二月 三月 四月 五月 .........
两个坐标系中的点这样转换就可以了