看一看這段代碼加載嵌入字體作爲一種資源,並控制在適用時,樣品展示中嵌入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
編譯選項接通,從嵌入式資源和載荷成PrivateFontCollection
讀取。函數ConvertFontEnumToFloat
使用硬編碼的浮點值來指示基於字體枚舉的大小。完成代碼後,請務必在指定類的Dispose
方法中處理PrivateFontCollection
實例。
WPF?的WinForms? ASP.NET?你可以使用位圖嗎? – Niki 2010-08-21 15:41:36
WinForms,這意味着我必須以某種方式渲染所有的字體位圖。不是我想要的解決方案,但如果這是實現它的唯一方法,我可能會研究它。 – 2010-08-21 15:45:41
嘗試通過一些TTF轉換程序運行它以使其可用。 – 2010-08-21 16:09:40