Посмотрите на этот код, который загружает встроенный шрифт в качестве ресурса и используется в элементах управления, где это применимо, в примере показано использование встраивания шрифта OCR
private PrivateFontCollection pfc = new PrivateFontCollection();
private Font _fntOCRFont = null;
private enum FontEnum{
OCR = 0
};
private FontSize _fntSizeDefault = FontSize.Small;
private float _fFontSize = 0.0F;
private void InitOCRFont(){
try{
System.IO.Stream streamFont = this.GetType().Assembly.GetManifestResourceStream("ocraext.ttf");
if (streamFont != null){
byte[] fontData = new byte[streamFont.Length];
streamFont.Read(fontData, 0, (int)streamFont.Length);
streamFont.Close();
unsafe{
fixed(byte *pFontData = fontData){
this.pfc.AddMemoryFont((System.IntPtr)pFontData, fontData.Length);
}
}
}else{
throw new Exception("Error! Could not read built-in Font.");
}
}catch(Exception eX){
throw new Exception("Exception was: " + eX.Message);
}
}
private void ConvertFontEnumToFloat(){
switch(this._fntSizeDefault){
case FontSize.Small :
this._fFontSize = 8.0F;
break;
case FontSize.Medium :
this._fFontSize = 10.0F;
break;
case FontSize.Large :
this._fFontSize = 12.0F;
break;
}
}
Типичный вызов кода будетчто-то вроде этого:
this.ConvertFontEnumToFloat();
this._fntOCRFont = new Font(this.pfc.Families[(int)FontEnum.OCR], this._fFontSize, System.Drawing.FontStyle.Bold);
if (this._fntOCRFont != null){
// Do something here... perhaps assign it to a control
}
Функция InitOCRFont
использует unsafe, что означает, что опция компилятора unsafe
включена, читает из встроенного ресурса и загружает в PrivateFontCollection
.Функция ConvertFontEnumToFloat
использует жестко закодированное значение с плавающей запятой, чтобы указать размер, основанный на перечислении шрифта.Закончив работу с кодом, обязательно избавьтесь от экземпляра PrivateFontCollection
в методе Dispose
указанного класса.