我该如何在 c# 应用程序中翻转字符串,例如:看起来像镜像的文本“AMBULANCE”?我不知道从哪里开始。我使用 c# 表单应用程序。
我已经尝试了反转字符串,但是否有可能翻转字符串(如镜像图像)?
例如:
ƎƆИA⅃UᙠMA
这与SO post中的颠倒顺序不同。Graphics.ScaleTransform()
来使关于Y轴的所有内容翻转。
例如,创建默认的Windows窗体应用程序并将以下OnPaint()
拖入其中,然后运行它:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
string text = "This will come out backwards";
e.Graphics.ScaleTransform(-1, 1);
float w = e.Graphics.MeasureString(text, this.Font).Width;
e.Graphics.DrawString(text, this.Font, Brushes.Black, -w, 0);
}
输出:
您也可以使用 Graphics.RotateTransform()
操作旋转文本,并使用 Graphics.ScaleTransform(1, -1)
进行翻转和镜像:
Bitmap bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
var g = Graphics.FromImage(bitmap);
g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
g.DrawString("AMBULANCE", font, brush, pictureBox.DisplayRectangle);
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipX);
pictureBox.Image = bitmap; // display bitmap on your form
结果:
概述: Winforms使用Unicode编码,您可以使用“翻转”的字符。 为此,您应创建一个带有正常和翻转字符的字典,并在反转后使用它。
var dict = new Dictionary<char, char>
{
{'A','A'},
{'B','ᙠ'},
{'C','Ɔ'},
{'D','ᗡ'},
// etc.
};
var str = "ABcd";
var mirror = new string(str.ToUpper().Reverse().Select(x=>dict[x]).ToArray());
实现这个有两个部分。
首先,简单的部分(假设你只处理基于拉丁字符的情况),string.Reverse()
会反转字符的顺序。否则使用类似于另一个问题答案中的技术。
第二部分有两种可能的解决方案。要么获取一个反转字符字体(免费的字体存在),并使用它来显示反转字符串。或者,使用像 http://txtn.us/mirror-words 这样的网站来建立一个看起来像反转字符的字符列表,然后设置一个字典来映射它们,例如
var Dictionary<char, char> = new Dictionary<char, char>
{
...
{ 'e', 'ɘ' },
...
};
然后,您可以逐个字符进行替换并显示该字符串。显然,这仅在您选择的字体中具有这些字符时才有效。
string
只是一个字节值序列,例如[45, 23, 48]
。你想要做的是改变这些字节在某个地方显示的方式。如果我们不知道你要在哪里显示字符串,我们就无法帮助你。 - Sergey Berezovskiy