[C#] 讀取字型檔案,但是不會被鎖住

2016-07-15

最近在在處理圖形問題,需求是必須要合成Barcode,這點不困難,只需要下載barcode 字型檔.ttf 就可以了,但是讀取後拿來畫在bitmap上面,之後那ttf檔案就被系統鎖起來,刪都刪不掉,即使我dispose 一堆東西也一樣,後來網路上查到一些作法,乾脆整理成一個function 之後就讀取.ttf 變成Font 物件,而且不會被系統lock住

private static Font GetFontFromFileWithoutLock(float size,string fontPath)
{
 
    var fontBytes = System.IO.File.ReadAllBytes(fontPath);
 
    //讀到記憶體中
    var fontBuffer = Marshal.AllocHGlobal(fontBytes.Length);
    Marshal.Copy(fontBytes, 0, fontBuffer, fontBytes.Length);
    PrivateFontCollection privateFont = new PrivateFontCollection();
 
    //從記憶體取得
    privateFont.AddMemoryFont(fontBuffer, fontBytes.Length);
    var res = new Font(privateFont.Families[0], size);
 
    privateFont.Dispose();
    return res;
}

很簡單,給需要的人


當麻許的超技八 2014 | Donma Hsu Design.