c#如何反转字体

open422000 2012-09-06 02:36:22
我现在是
GraphicsContainer containerState = gMem.BeginContainer();

PointF currentPf = new PointF();
PointF movePf = new PointF();

currentPf = Vector.pointCurrent; //鼠标单击后的点
movePf = Vector.movePointCurrent;//鼠标移动的点

DrawTools.DrawLineLength(gMem, currentPf, movePf, this.Font, pCanvas);//在两条直线之间显示字符串,里面调用了drawstring函数。 把字体放在 (currentPf + movePf)/2 的位置.
gMem.EndContainer(containerState);


现在我的效果是
字体在线上 是倒过来的,
我用
gMem.ScaleTransform(1, -1); 倒过去的时候 字体又不在线上了。。。怎么办呢
...全文
390 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
open422000 2012-09-07
  • 打赏
  • 举报
回复
我想表达这样的意思就是, 我本来字体是跟着线走的,没有翻转的,现在,我因为翻转了线
gMem.TranslateTransform(pCanvas.Width / 2, pCanvas.Height / 2); //坐标移到画布中间
gMem.ScaleTransform(1, -1);

所以字就反了。。

我要怎么把字也调正呢。。

我必须翻转线, 因为线没跟着鼠标走
open422000 2012-09-07
  • 打赏
  • 举报
回复
不知道,为什么还是不行。。。 字老没跟着鼠标移动。。老是方向有点反, 我还看不懂原位翻转的代码含义,有没有大概的解释呢,我看能不能从中领悟到什么
dylike 2012-09-07
  • 打赏
  • 举报
回复
上面的写错了。用这个

using (Graphics G = Graphics.FromHwnd(this.Handle)) {
//定义临时图层 
using (Bitmap B = new Bitmap(50, 50)) {
using (Graphics G2 = Graphics.FromImage(B)) {
G2.DrawString("这是翻过来的文字", this.Font, Brushes.Black, new Point(0, 0));
}
//将临时图层以Width负长度绘制得到左右倒图(Height负长度将得到垂直倒图)
G.DrawImage(B, new Rectangle(100, 100, -50, 50), new Rectangle(0, 0, B.Width, B.Height), GraphicsUnit.Pixel);
}
}
dylike 2012-09-07
  • 打赏
  • 举报
回复
DrawString("TestAbc",this.font,New Rectangle(100,100,10,10)
把原来的10,10,100,100的矩形倒过来。
lizhibin11 2012-09-06
  • 打赏
  • 举报
回复
DrawTools.DrawLineLength这些我不知道是什么,也不知道你原先做过什么处理,我写个小例子你看一下能否提供帮助。

//目标:在(100, 100)处写字符,字符下面画线,然后将字符在原位置上下翻转
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
//在(100,100) + 字符高度 的地方划线
g.DrawLine(Pens.Black, new PointF(100, DefaultFont.Height + 100), new PointF(200, DefaultFont.Height + 100));
//变换,字符在原位置上下翻转
g.TranslateTransform(0, -100 - DefaultFont.Height / 2, MatrixOrder.Prepend);
g.ScaleTransform(1, -1, MatrixOrder.Append);
g.TranslateTransform(0, 100 + DefaultFont.Height / 2, MatrixOrder.Append);
//在(100, 100)处写字符
g.DrawString("abcdefg", DefaultFont, Brushes.Black, new PointF(100, 100));
}
open422000 2012-09-06
  • 打赏
  • 举报
回复
还是不可以。。
因为我之前做过 坐标转换, 所以我才用 beginContainer,
在外面画线的时候
我是
gMem.TranslateTransform(pCanvas.Width / 2, pCanvas.Height / 2); //坐标移到画布中间
gMem.ScaleTransform(1, -1);
DrawTools.DrawAllLines(gMem, pCanvas, (float)(DrawObject.Space - 30));
是以中心为原点画线的。。
现在就是想把字 显示在线中央
lizhibin11 2012-09-06
  • 打赏
  • 举报
回复
gMem.ScaleTransform(1, -1);替换为

gMem.TranslateTransform(0, (-currentPf.Y - movePf.Y - this.Font.Height) / 2, MatrixOrder.Prepend);
gMem.ScaleTransform(1, -1, MatrixOrder.Append);
gMem.TranslateTransform(0, (currentPf.Y + movePf.Y + this.Font.Height) / 2, MatrixOrder.Append);

试试看
bulebirds 2012-09-06
  • 打赏
  • 举报
回复
用html5吧,呵呵

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧