引用 | 編輯
mainchen
2003-05-21 10:16 |
樓主
|
||
x0
提取Windows的 TTF字體輪廓矢量數據 西安飛機工業公司設計部 朱朝陽 -------------------------------------------------------------------------------- ---- Windows系統的TTF字體具有字體優美、可無級縮放等優點,最適合應用在CAD類圖形處理等軟件中。直接分析TTF字體的文件格式並讀出每個字的輪廓矢量是相當困難的,我們可以借助API函數來方便地獲得這些數據。 ---- 調用函數GetGlyphOutline可以得到一個字的輪廓矢量或者位圖。 ---- 函數原型如下: DWORD GetGlyphOutline( HDC hdc, // ?#93;備句柄 UINT uChar, // 將要讀取的字符 UINT uFormat, // 返回數據的格式 LPGLYPHMETRICS lpgm, // GLYPHMETRICS結構地?#125; DWORD cbBuffer, // 數據緩衝區的大小 LPVOID lpvBuffer, // 數據緩衝區的地?#125; CONST MAT2 *lpmat2 // 轉置矩?#125;的地?#125; ); ---- 其中,參數uFormat取值如下: GGO_NATIVE - 要求函數返回字符的輪廓矢量數據; GGO_METRICS - 函數僅返回GLYPHMETRICS結構至lpgm; 參數lpgm指向GLYPHMETRICS結構,該結構描述字符的位置。 參數lpmat2指向字符的轉置矩?#125;。 ---- 本文以下C++ Builder?#123;序示範如何在畫布上以指定的大小繪製字符串。 ---- 首先,建立一個新項目,在主窗口上放置一個Image控件,一個Edit控件,一個Button控件;然後,在Button的點擊事件中?#91;入如下代碼: #include < stdlib.h > void __fastcall TForm1::Button1Click(TObject *Sender) { TRect ClipRect = Rect(0,0,Image1->Width,Image1->Height); Image1->Picture = 0; StretchTextRect(Image1->Canvas, ClipRect, Edit1->Text); } ---- 添?#91;如下子?#123;序: //--------------------- void TForm1::StretchTextRect(TCanvas *pCanvas, TRect ClipRect, AnsiString Text) { pCanvas->Font->Size = 100; pCanvas->Font->Name = 「細明體"; pCanvas->Pen->Color = clBlack; pCanvas->Pen->Mode = pmCopy; pCanvas->Pen->Style = psSolid; pCanvas->Pen->Width = 1; int XSize = ClipRect.Width() / Text.Length(); int YSize = ClipRect.Height(); MAT2 mat2; // 轉置矩?#125;,不用變換 mat2.eM11.value = 1;mat2.eM11.fract = 0; mat2.eM12.value = 0;mat2.eM12.fract = 0; mat2.eM21.value = 0;mat2.eM21.fract = 0; mat2.eM22.value = 1;mat2.eM22.fract = 0; GLYPHMETRICS gm,gmm; // 首 .. 訪客只能看到部份內容,免費 加入會員 x0
|