/// <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); }