为什么无法将任何字体另存为图像? (但要在我的Windows窗体上显示它)

2024-01-06

我有点困惑,因为我可以在 Windows 窗体上显示每种字体的每个字符串,但作为图像并不总是可能的。也许我的代码有问题。但让我告诉你我正在尝试什么。

一开始我有这个:

    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 http://www.jtbarton.com/Barcodes/Code128.aspx但我也用其他字体测试过它,但它并不总是有效。


嗯,这很奇怪,但是您没有使用 Label 用来绘制文本的相同代码。 Label 控件默认使用 TextRenderer.DrawText(),这是一个调用 GDI 函数 (DrawTextEx) 的函数。您的 Graphic.DrawString() 调用会调用一个 GDI+ 函数,该函数使用完全不同的文本渲染引擎。它有一些布局问题,这就是 TextRenderer 被添加到 .NET 2.0 的原因

我不知道这两个函数以不同的方式映射字体。但谁知道,这并不完全是标准字体。请改用 TextRenderer。 Label 的 DrawToBitmap() 方法是一个后备解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法将任何字体另存为图像? (但要在我的Windows窗体上显示它) 的相关文章

  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 此插件导致 Outlook 启动缓慢

    我正在使用 C NET 4 5 开发 Outlook Addin 项目 但部署后 有时 Outlook 会禁用我的插件 并显示此消息 这个插件导致 Outlook 启动缓慢 我不知道我的插件出了什么问题 这只有很少的代码 并且ThisAdd
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • .NET 程序集大小会影响性能吗?

    net 程序集的大小是否会影响性能 您的 Windows 窗体 Web 窗体项目中的程序集数量如何 来自微软的模式和实践提高 NET 应用程序性能和可扩展性 http msdn microsoft com en us library ms9
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 使用 Tweepy 自动直接消息响应

    我目前正在使用 python 中的 tweepy 包作为 DM 侦听器 我希望在收到发件人的消息后回复他们 我有以下内容 class StdOutListener StreamListener def init self self twee
  • 如何写入 7z 存档格式的二进制数据?

    我一直在研究 7z 存档格式的格式描述和源代码 但在编写有效的容器时仍然遇到困难 我想我可以创建一个空容器 无论如何 这是我的开始 std ofstream ofs archivename c str std ios binary std
  • 批处理文件编辑 ini 文件中的行

    我有一个自动生成的 ini 文件 它的第二行始终是 Version W XX Y ZZ Where W是主版本号 XX是次要版本 Y是构建和ZZ是修订版 我需要打开该 ini 文件并使用批处理文件编辑该行 以便删除该版本中的内部版本号和修订
  • 使用 C++ 在 Linux 中创建计时器队列 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 Windows 中使用 C 实现了一个项目 该项目创建一个计时器队列 向其中添加条目 在计时器到期时执行回调函数 等待下一个计时
  • 如何使用Java日历从日期中减去X天?

    有人知道使用Java日历从日期中减去X天的简单方法吗 我还没有找到任何函数可以让我直接从 Java 中的日期减去 X 天 有人能指出我正确的方向吗 取自这里的文档 http docs oracle com javase 7 docs api
  • 获得 Android 用户消息平台的同意

    我正在尝试使用 Admob 实现 UE 同意 让用户选择是否想要在 Android 中显示个性化广告 我正在通过用户消息平台的 资金选择 来做到这一点 我遵循了这个快速入门指南 https developers google com adm
  • Sphinx实时索引配置?

    我是 Sphinx 的新手 我需要 Linux 服务器中实时索引 sphinx config 的示例代码 对于近实时索引 您可以使用增量方法 http sphinxsearch com docs 1 10 delta updates htm
  • C 标准库中包含哪些内容?

    我将举一个例子GNU C 库 http www gnu org software libc manual html mono libc html Opening and Closing Files文档 13 1 打开和关闭文件 本节描述打开
  • 当你有 std::string 时如何使用 basic_istream

    我有一个使用 basic istream 作为参数的函数 并且我有一个 std string 其中包含我需要传递它的数据 我怎么做 您可以将字符串数据放入流中 std string x std stringstream ss x put s
  • 比较器 - int 不能取消引用[重复]

    这个问题在这里已经有答案了 我在这里看到了如何使用 Comparator 接口对 ArrayList 进行排序的示例 所以我尝试了一下 对于字符串 它工作得很好 但是对于我想要排序的一个变量是整数 它不会编译 说 int 不能取消引用 我该
  • 如何让屏幕暂停? [复制]

    这个问题在这里已经有答案了 可能的重复 如何阻止 C 控制台应用程序立即退出 https stackoverflow com questions 2529617 how to stop c console application from
  • 在 C++ 中使用 OpenCV 2.4 计算凸面缺陷

    我正在使用 OpenCV 2 4 来计算图像的凸包 我还进行了一些处理以消除图像中的一些噪声 这与问题并不真正相关 计算凸包的代码如下 cv Mat sourceImage assume something is already here
  • 如何将HTML文件转换为word? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要将 HTML 文档作为 Word DOC 文件保存在内存中 有人可以给我一些可以用来执行此操作的
  • JFreeChart 中的 LogAxis 上未显示小刻度

    我在用着JFreeChart绘制一些数据并使用LogAxis对于范围轴 我很困惑为什么我似乎无法在轴上显示小刻度 但网格线显示得很好 如果我不使用LogAxis我可以使用以下命令打开和关闭小刻度setMinorTickMarksVisibl
  • 具有拖放功能的示例任务应用程序

    app js App Em Application create App IndexRoute Em Route extend model function return newTasks Em A id 1 name Task 1 id
  • 这是 JavaScript 中的一个简单的去抖动函数吗?

    var debounce function fn delay var timeoutId return function debounced if timeoutId clearTimeout timeoutId timeoutId set
  • CSS 选择最多 N 层的嵌套元素

    我有许多嵌套元素 并且我尝试仅选择前 N 层 下面显示了一个工作示例 其中我选择了前 7 个级别并设置了它们的样式 这正是我想要的 但是 我希望有一种选择这些元素的简化方法 在我的实际用例中 我不知道嵌套元素的总数 并且我试图选择前 50
  • 使用 Rcpp Sugar 将平均值和标准差传递到 dnorm()

    我正在将一些 R 代码转换为 Rcpp 代码 并且需要计算给定均值向量和标准差向量的观察向量的可能性 如果我假设平均值为 0 标准差为 1 我可以编写这个函数 运行这个函数需要加载 inline 和 Rcpp 包 dtest1 cxxfun
  • 与 jMockit 结合的测试覆盖率报告

    我正在使用 jmockit 和 Ant 对于每个测试文件运行 index html文件在覆盖率报告文件夹中创建 覆盖 对于多个测试文件 这index html被覆盖 我正在寻找所有文件的综合报告 应该做什么 我读过有关使用 ser文件 但我
  • 为什么无法将任何字体另存为图像? (但要在我的Windows窗体上显示它)

    我有点困惑 因为我可以在 Windows 窗体上显示每种字体的每个字符串 但作为图像并不总是可能的 也许我的代码有问题 但让我告诉你我正在尝试什么 一开始我有这个 Label l new Label l Text CSharp this F