- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点困惑,因为我可以在我的窗口窗体上显示每个字符串和每种字体,但作为图像并不总是可能的。也许我的代码有问题。但让我向您展示我的尝试。
起初我有这个:
Label l = new Label();
l.Text = "Ì CSharp Î";
this.Font = new Font("Code 128", 80);
l.Size = new System.Drawing.Size(300, 200);
this.Controls.Add(l);
this.Size = new Size(300, 200);
嗯,这很好。现在我想尝试用与图像相同的字体保存相同的字符串。我找到了这段代码,我认为这就是如何做到这一点
private static Image DrawText(string text, Font font, Color textColor, Color backColor)
{
//first, create a dummy bitmap just to get a graphics object
Image img = new Bitmap(1, 1);
Graphics drawing = Graphics.FromImage(img);
//measure the string to see how big the image needs to be
SizeF textSize = drawing.MeasureString(text, font);
//free up the dummy image and old graphics object
img.Dispose();
drawing.Dispose();
//create a new image of the right size
img = new Bitmap((int)textSize.Width, (int)textSize.Height);
drawing = Graphics.FromImage(img);
//paint the background
drawing.Clear(backColor);
//create a brush for the text
Brush textBrush = new SolidBrush(textColor);
drawing.DrawString(text, font, textBrush, 0, 0);
drawing.Save();
textBrush.Dispose();
drawing.Dispose();
return img;
}
var i = DrawText("Ì CSharp Î", new Font("Code 128", 40), Color.Black, Color.White);
如果我保存图片,我会得到这个:
我不明白。我使用的字符串和字体与我在 Windows 窗体上使用的相同。为什么会这样?以及如何避免这个问题?
PS:我用的字体是下载的here但我也用其他字体测试过它,但它并不总是有效。
最佳答案
嗯,这很奇怪,但是您使用的代码与 Label 用来绘制文本的代码不同。 Label 控件默认使用 TextRenderer.DrawText(),这是一个调用 GDI 函数 (DrawTextEx) 的函数。您的 Graphic.DrawString() 调用调用 GDI+ 函数,该函数使用完全不同的文本呈现引擎。它存在一些布局问题,这就是将 TextRenderer 添加到 .NET 2.0 的原因
我不知道这两个函数以不同方式映射字体。但谁知道呢,这不完全是标准字体。请改用 TextRenderer。 Label 的 DrawToBitmap() 方法是一种后备解决方案。
关于c# - 为什么无法将任何字体保存为图像? (但要在我的窗体上显示它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557513/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!