1

我有一项旨在进行图像处理的服务。其中一项任务是在图像上覆盖字符串,然后将其发送到程序并显示。

我无法在位图图像上覆盖文本,有人可以帮忙吗?

我正在尝试使用:

PrivateFontCollection fonts = new PrivateFontCollection();
public static FontFamily LoadFontFamily(string fileName, out PrivateFontCollection fontCollection)
{
    fontCollection = new PrivateFontCollection();
    fontCollection.AddFontFile(HostingEnvironment.ApplicationPhysicalPath + '/' + fileName);
    return fontCollection.Families[0];
}

FontFamily family = LoadFontFamily("arial.ttf", out fonts);
Font font = new Font(family, 20);

using (Graphics g = Graphics.FromImage(bitmap))
{
    g.DrawString("text", font, new SolidBrush(GetColorFromHexString(foreground)), new PointF(10F, 10F));
}

根据此页面上的信息。

由于该服务不知道“Arial”是什么 - 它显然失败了。我已将 .ttf 字体作为资源包含在服务中,并将构建内容设置为“始终复制”。

谢谢!

4

2 回答 2

1

Arial 是最古老的 Windows 字体之一,长期以来,它作为所有 Windows 操作系统版本(包括 Windows 服务器)的默认安装的一部分提供。所以没有理由:

    Font font = new Font("Arial", 20);

不应该工作。

于 2013-04-07T05:49:53.170 回答
0

Wcf 与字体无关,所以我建议删除这个标签。

我没有错误,但是您的图像不包含您的字符串-您的逻辑无效。

我建议以下步骤:

  1. 确保此代码适用于常规 winforms 项目
  2. 尝试将此逻辑重新分解为单独的 dll(类库,而不是 win 表单)。如果您有 Resharper 之类的工具 - 它会添加所有必需的参考。
    此时 - 您的代码应该在所有情况下都可以工作,所以
  3. 将其移回以通过您的 wcf 服务公开。
于 2013-04-07T04:39:29.977 回答