繁体   English   中英

为字母绘制矩形框

[英]Draw rectangle box for letters

我的代码。 输出: 在此处输入图片说明

Bitmap bitmap = new Bitmap(600, 300, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
GraphicsPath path = new GraphicsPath();
StringFormat format = new StringFormat();
Rectangle rect = new Rectangle(0, 0, 600, 300);
SolidBrush Brush = new SolidBrush(Color.White);
g.FillRectangle(Brush, rect);


g.SmoothingMode = SmoothingMode.AntiAlias;
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
path.AddString(textBox1.Text, FontFamily.GenericSansSerif, (int)FontStyle.Bold, 128, rect, format);

Brush = new SolidBrush(Color.Blue);
g.FillPath(Brush, path);

float x = path.GetBounds().X;
float y = path.GetBounds().Y;
float w = path.GetBounds().Width / textBox1.Text.Length;
float h = path.GetBounds().Height;

Pen redPen = new Pen(Color.Red, 2);
for (int i = 0; i < textBox1.Text.Length+1; i++)
{
    rect = new Rectangle((int)x, (int)y, (int)w*i, (int)h);
    g.DrawRectangle(redPen, rect);
}

pictureBox1.Image = bitmap;

我在输出中得到错误的结果,因为我无法获得字母的角并且使用了错误的方式。

但我需要获得正确的字母角像素,绘制矩形并填充它。 像这样: 在此处输入图片说明

这一行让我在你的代码中发现了一个错误:

for (int i = 0; i < textBox1.Text.Length+1; i++)

它应该是:

for (int i = 0; i < textBox1.Text.Length; i++)

但随后确实似乎只出现了 3 个红色框。

原因是第一个矩形(带有您的代码)非常小,因为宽度是(int)w*i 那应该是(int)w*(i+1)

现在回到你绘制矩形的地方。

如果您使用文本“WWWW”,您会发现您的解决方案看起来还不错。

但是如果你用'IIII'测试,十你应该注意到最左边的'I'在红框中左对齐,最右边的'I'在红框中右对齐。

您正在绘制 4 个相等的框,用不同的 4 个字母围成一圈。

解决方案可能是使用等宽字体绘制字母。

或者,如果您不想要等宽字体,请查看如何精确测量字符宽度?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM