c# - 使用 Drawstring 垂直翻转文本

标签 c# text drawstring

我有一些代码可以将一些文本写入定义的区域。

 graphics.DrawString(text, goodFont, Brushes.Black, textarea, stringFormat);

在某些情况下,我想水平翻转文本,使其从:

enter image description here

enter image description here

我已经尝试测量字符串宽度并取其倒数:

float w = graphics.MeasureString(text, goodFont).Width;
graphics.DrawString(text, goodFont, Brushes.Black, -w, 0, stringFormat);

但我的问题是文本超出了我希望在其中绘制的框的边界 (textarea)。

我想水平翻转文本,同时保持我的框边界。谁能指出我完成任务的正确方向?

提前致谢!

编辑:我试图避免创建位图然后进行转换。

最佳答案

您可以使用图形变换。我看到的更容易的是使用这个 Matrix Constructor (Rectangle, Point[])像这样:

Point[] transformPoints =
{
    // upper-left:
    new Point(textarea.Right - 1, textarea.Top),
    // upper-right:
    new Point(textarea.Left + 1, textarea.Top),
    // lower-left:
    new Point(textarea.Right - 1, textarea.Bottom),
};
var oldMatrix = graphics.Transform; 
var matrix = new Matrix(textarea, transformPoints);
try
{
    graphics.Transform = matrix;
    graphics.DrawString(text, goodFont, Brushes.Black, textarea, stringFormat);
}
finally
{
    graphics.Transform = oldMatrix;
    matrix.Dispose();
}

附言尽管@serhiyb 在我之前几秒钟发布了类似的答案,但我认为这更容易理解 - 您只需指定源矩形以及如何转换其左上角、右上角和左下角点即可定义转换。

关于c# - 使用 Drawstring 垂直翻转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39024728/

相关文章:

c# - Perforce .net API 直接从服务器/连接超时下载文件

c# - linq 作为列名的数据集问题

java - 如何计算基于结构的字符串相似度?

c# - 确定位图大小以保存文本字符串

java - 在 PaintedImage Java 上绘制字符串

c# - AES 加密得到不正确的结果

带有 DataGrid 的 WPF 应用程序中的 C# 搜索框

javascript - 使用 javascript 禁用输入文本类型

text - ElasticSearch查询问题

c# - 如何使用 System.Drawing 将旋转的字符串绘制为图像?