如何翻转一个字符串?

4
我该如何在 c# 应用程序中翻转字符串,例如:看起来像镜像的文本“AMBULANCE”?我不知道从哪里开始。我使用 c# 表单应用程序。 我已经尝试了反转字符串,但是否有可能翻转字符串(如镜像图像)? 例如: ƎƆИA⅃UᙠMA 这与SO post中的颠倒顺序不同。

5
你用什么来绘制文本?仅使用控制台吗?还是窗体、WPF(Windows Presentation Foundation)?或者是OpenGL、DirectX等等……你可以使用任何技术,但我们需要知道你使用的技术。 - Alex Anderson
2
你用什么来绘制字符串?WPF、WinForms、Console?OpenGL? - Alex Anderson
1
@utility string 只是一个字节值序列,例如 [45, 23, 48]。你想要做的是改变这些字节在某个地方显示的方式。如果我们不知道你要在哪里显示字符串,我们就无法帮助你。 - Sergey Berezovskiy
1
你应该创建一个包含正常和翻转字符的字典,并在反转后使用它。 - Alexey Nis
1
@AlexeyNis 的想法是正确的。你可以使用像这样的网站通过输入字母来建立一个翻转字符列表:http://txtn.us/mirror-words 当然,另一个选择是使用像其他人建议的图片。 - samgak
显示剩余2条评论
4个回答

7
除了Sergey提出的方法,您还可以使用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);
}

输出:

关于Y轴的反射文本

您也可以使用 Graphics.RotateTransform() 操作旋转文本,并使用 Graphics.ScaleTransform(1, -1) 进行翻转和镜像:

输入图像描述


1
不错的方法,我之前不知道有ScaleTransform选项。 - Sergey Berezovskiy

4
你可以创建位图,将字符串写入其中,然后使用Image.RotateFlip方法水平翻转位图:
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

结果:

enter image description here


感谢@Sergey抽出时间来帮忙,但我更倾向于使用字符串/文本而不是图像。谢谢。 - Tharif
@utility 为什么?那只是一个内存位图(像素的二维数组)。使用 WinForms,任何字符串最终都会被绘制到 GDI 绘图表面。无论是你的控件还是内存位图都没有关系。 - Sergey Berezovskiy
@utility 唯一使用字符串的方法是使用特殊的反向字体,然后在该字体中显示字符串之前将其反转。 - Matthew Watson

1

概述: 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());

0

实现这个有两个部分。

首先,简单的部分(假设你只处理基于拉丁字符的情况),string.Reverse()会反转字符的顺序。否则使用类似于另一个问题答案中的技术

第二部分有两种可能的解决方案。要么获取一个反转字符字体(免费的字体存在),并使用它来显示反转字符串。或者,使用像 http://txtn.us/mirror-words 这样的网站来建立一个看起来像反转字符的字符列表,然后设置一个字典来映射它们,例如

var Dictionary<char, char> = new Dictionary<char, char>
{
    ...
    { 'e', 'ɘ' },
    ...
};

然后,您可以逐个字符进行替换并显示该字符串。显然,这仅在您选择的字体中具有这些字符时才有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接