我使用PrivateFontCollection
在我的应用中嵌入了字体。我可以安装字体,然后在Graphics
对象中完美地使用它们。问题是字体名称在我的表单控件Font
属性中无法识别。我想确保如果我创建一个Font
对象,例如new Font("MyFontName",...)
,则会识别名称MyFontName
并使用加载的字体。
我做了什么:
public FontFamily InstallFromMemory(byte[] bytes)
{
// Get unsafe bytes
GCHandle pinnedArray = GCHandle.Alloc(bytes, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
// install for gdi+
Collection.AddMemoryFont(pointer, bytes.Length);
var result = Collection.Families[Collection.Families.Length - 1];
// install for gdi
// do the unmanaged font (Windows 2000 and later)
uint cFonts;
var r = AddFontMemResourceEx(bytes, bytes.Length, IntPtr.Zero, out cFonts);
if (r.ToInt64() == 0)
throw new Exception("Failed to install the font.");
// free unsafe bytes
pinnedArray.Free();
Families.Add(result.Name, result);
return result;
}
它没有错误,但它也没有用。 AddFontMemResourceEx
即使是正确的API函数也可以调用吗?我该怎么做才能得到我想要的结果?