/// <summary>
///
/// </summary>
internal class FontHelper
{
/// <summary>
/// 自定义字体
/// </summary>
private PrivateFontCollection _pfc { get; set; }
/// <summary>
/// 返回字体帮助类的实例
/// </summary>
public FontHelper(byte[] fontResource)
{
if (fontResource == null)
{
throw new ArgumentNullException(nameof(fontResource));
}
_pfc = new PrivateFontCollection();
uint c = 0;
IntPtr intPtr = Marshal.AllocCoTaskMem(fontResource.Length);
Marshal.Copy(fontResource, 0, intPtr, fontResource.Length);
Win32naticemethod.AddFontMemResourceEx(intPtr, (uint)fontResource.Length, IntPtr.Zero, ref c);
_pfc.AddMemoryFont(intPtr, fontResource.Length);
Marshal.FreeCoTaskMem(intPtr);
intPtr = IntPtr.Zero;
}
/// <summary>
/// 获取字体
/// </summary>
/// <param name="fontIndex"></param>
/// <param name="fontSize"></param>
/// <param name="fontStyle"></param>
/// <returns></returns>
public Font GetFont(int fontIndex, float fontSize = 20, FontStyle fontStyle = FontStyle.Regular)
{
return new Font(_pfc.Families[fontIndex], fontSize, fontStyle);
}
}
/// <summary>
/// 非托管方法
/// </summary>
internal static class Win32naticemethod
{
/// <summary>
/// 添加资源
/// </summary>
/// <param name="pbFont"></param>
/// <param name="cbFont"></param>
/// <param name="pdv"></param>
/// <param name="pcFonts"></param>
/// <returns></returns>
[DllImport("gdi32.dll")]
public static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts);
}