gpt4 book ai didi

c# - (C#) 如何使用高度 = 6 的 Tahoma 绘制 "a"

转载 作者:行者123 更新时间:2023-12-03 21:50:31 24 4
gpt4 key购买 nike

我一直在尝试这样做,但出于某种原因,这只会给我带来奇怪的结果:

int bpp = Screen.PrimaryScreen.BitsPerPixel;
string fontName = "Tahoma";
Font font = new Font(fontName, 10 * bpp, GraphicsUnit.Point);
Bitmap bm = new Bitmap(20 * bpp, 20 * bpp);
Graphics g = Graphics.FromImage(bm);
TextRenderer.DrawText(g, "a", font, new Rectangle(0, 0, 5 * bpp, 6 * bpp), Color.Black);
g.Flush();
pictureBox1.Image = bm;

我在这里做错了什么?我没有看到图片上印有任何内容。如果我删除所有 bpp 引用,我可以看到它,但它非常小。

最佳答案

您知道 BitsPerPixel描述颜色深度(用于描述像素颜色的内存位数),与分辨率无关?

我假设你想要做的是以与分辨率相关的大小绘制文本,你可以引用DpiX来完成。和 DpiY Graphics 的属性对象。

更新

我不确定你是否需要为此计算 Dpi。您需要做的就是创建一个定义所需文本大小的矩形,然后计算正确的字体大小以使文本适合矩形。以下是这样做的(但最大化垂直和水平方向的文本大小)。它可能会给您一些解决问题的建议:

Bitmap bm = new Bitmap(50, 50);
using (Font font = new Font(fontName, 10, GraphicsUnit.Point))
using (Graphics g = Graphics.FromImage(bm))
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near
};
Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height);
// measure how large the text is on the Graphics object with the current font size
SizeF s = g.MeasureString(text, font);
// calculate how to scale the font to make the text fit
float fontScale = Math.Max(s.Width / rect.Width, s.Height / rect.Height);
using (Font fontForDrawing = new Font(font.FontFamily, font.SizeInPoints / fontScale, GraphicsUnit.Point))
{
g.DrawString(text, fontForDrawing, Brushes.Black, rect, stringFormat);
}


}

而且,如果您想打印具有给定磅值的文本,则无需进行测量;只需设置字体大小:

Bitmap bm = new Bitmap(20, 20);
using (Font font = new Font(fontName, 6, GraphicsUnit.Point))
using (Graphics g = Graphics.FromImage(bm))
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near
};
Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height);
g.DrawString(text, font, Brushes.Black, rect, stringFormat);
}

关于c# - (C#) 如何使用高度 = 6 的 Tahoma 绘制 "a",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1006408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com