[C#/WINFORM] PrivateFontCollection 클래스 : AddMemoryFont 메소드를 사용해 바이트 배열에서 폰트 패밀리 추가하기
C#/WinForm 2021. 8. 21. 23:36728x90
반응형
728x170
▶ FontHelper.cs
using System;
using System.Drawing;
using System.Drawing.Text;
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 폰트 헬퍼
/// </summary>
public static class FontHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 폰트 패밀리 구하기 - GetFontFamily(sourceArray)
/// <summary>
/// 폰트 패밀리 구하기
/// </summary>
/// <param name="sourceArray">소스 배열</param>
/// <returns>폰트 패밀리</returns>
public static FontFamily GetFontFamily(byte[] sourceArray)
{
int sourceArrayLength = sourceArray.Length;
PrivateFontCollection privateFontCollection = new PrivateFontCollection();
IntPtr memoryHandle = Marshal.AllocHGlobal(sourceArrayLength);
if(memoryHandle == null)
{
return null;
}
Marshal.Copy(sourceArray, 0, memoryHandle, sourceArrayLength);
privateFontCollection.AddMemoryFont(memoryHandle, sourceArrayLength);
Marshal.FreeHGlobal(memoryHandle);
if(privateFontCollection.Families.Length == 0)
{
return null;
}
return privateFontCollection.Families[0];
}
#endregion
#region 폰트 구하기 - GetFont(sourceArray, fontSize, fontStyle)
/// <summary>
/// 폰트 구하기
/// </summary>
/// <param name="sourceArray">소스 배열</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <returns>폰트</returns>
public static Font GetFont(byte[] sourceArray, float fontSize, FontStyle fontStyle)
{
FontFamily fontFamily = GetFontFamily(sourceArray);
if(fontFamily == null)
{
return null;
}
Font font = new Font(fontFamily, fontSize, fontStyle);
return font;
}
#endregion
#region 폰트 구하기 - GetFont(sourceArray, fontSize)
/// <summary>
/// 폰트 구하기
/// </summary>
/// <param name="sourceArray">소스 배열</param>
/// <param name="fontSize">폰트 크기</param>
/// <returns>폰트</returns>
public static Font GetFont(byte[] sourceArray, float fontSize)
{
Font font = GetFont(sourceArray, fontSize, FontStyle.Regular);
return font;
}
#endregion
}
}
728x90
▶ MainForm.cs
using System.Drawing;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
Font font = FontHelper.GetFont(Properties.Resources.독립서체_안중근_GS, 24f);
this.messageLabel.Font = font;
// Application 클래스 SetCompatibleTextRenderingDefault 정적 메소드를 true로 설정하거나
// Control 클래스 UseCompatibleTextRendering 속성을 true로 설정해야
// 커스텀 폰트를 표시할 수 있다.
this.messageLabel.UseCompatibleTextRendering = true;
}
#endregion
}
}
300x250
▶ Program.cs
using System;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
static class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
// Application 클래스 SetCompatibleTextRenderingDefault 정적 메소드를 true로 설정하거나
// Control 클래스 UseCompatibleTextRendering 속성을 true로 설정해야
// 커스텀 폰트를 표시할 수 있다.
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Button 클래스 : 권한 상승 필요 표시 버튼 사용하기 (0) | 2021.08.26 |
---|---|
[C#/WINFORM] Screen 클래스 : PrimaryScreen 정적 속성을 사용해 기본 디스플레이 해상도 구하기 (0) | 2021.08.26 |
[C#/WINFORM] Color 구조체 : 혼합 색상 구하기 (0) | 2021.08.23 |
[C#/WINFORM] Panel 클래스 : 둥근 패널 사용하기 (0) | 2021.08.22 |
[C#/WINFORM] Point 구조체 : 직선에 포함된 포인트 배열 구하기 (0) | 2021.08.22 |
[C#/WINFORM] Image 클래스 : BASE64 문자열에서 이미지 구하기 (0) | 2021.08.20 |
[C#/WINFORM] Button 클래스 : FlatStyle/FlatAppearance 속성을 사용해 버튼 테두리 제거하기 (0) | 2021.08.19 |
[C#/WINFORM] Panel 클래스 : 패널에서 폼 드래그하기 (0) | 2021.08.19 |
[C#/WINFORM] Form 클래스 : 클라이언트 영역에서 폼 드래그하기 (0) | 2021.08.19 |
[C#/WINFORM] Form 클래스 : 클라이언트 영역에서 폼 드래그하기 (0) | 2021.08.19 |
댓글을 달아 주세요