引用 | 编辑
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
|