gpt4 book ai didi

c# - 如何从 Fontfamily 中获取准确的字体?

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:29 27 4
gpt4 key购买 nike

我想创建一个图片框,使其形状适应特定字体的字符串。我需要它以便稍后创建文本并将其放在 AxWindowsMediaPlayer 控件上。

因此我创建了以下类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows.Forms;
using System.Drawing;

namespace myProject
{
class ShapedPictureBoxes : PictureBox
{
public ShapedPictureBoxes()
{
this.Paint += this.shapedPaint;
}

void shapedPaint(object sender, PaintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath graphicsPath = new System.Drawing.Drawing2D.GraphicsPath();


Font font = new Font("Arial", 14f);
float emSize = e.Graphics.DpiY*font.Size/72;
graphicsPath.AddString(text, new FontFamily("Arial"), (int)System.Drawing.FontStyle.Regular, emSize, new Point(0,0), new StringFormat());

e.Graphics.DrawString(text, font, Brushes.Red, new Point(0, 0));

this.Region = new Region(graphicsPath);
}

public string text = "Here comes the sun, doo da doo do";
}

}

现在的问题是,“Graphics.DrawString”与 graphicspath.AddString 不匹配,可能是因为 FontFamily 与 Font 不同。我怎样才能匹配它们?

那么:如何将 Fontfamily 转换为 Font 或反之亦然?

它是这样的:

the result

最佳答案

您需要考虑以下事实:Font 大小是以磅为单位指定的,而 AddString() 大小是以设备单位指定的。

您可以按如下方式转换单位:

Font font = new Font("Arial", 14f, FontStyle.Bold);
float emSize = e.Graphics.DpiY * font.Size / 72; // Here's the conversion.
graphicsPath.AddString(text, new FontFamily("Arial"), (int)System.Drawing.FontStyle.Bold, emSize, new Point(0, 0), new StringFormat());

请注意,我将计算出的 emSize 传递给 AddString() 而不是传递 14f

关于c# - 如何从 Fontfamily 中获取准确的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504833/

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