廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 8102 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
mainchen 葫蘆墩家族
個人頭像
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
頭銜:
版主
級別: 版主 該用戶目前不上站
版區: 星僑五術軟體
推文 x22 鮮花 x36
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[Delphi][教學] [教學] 提取 Windows 的 TTF 字體輪廓矢量數據
提取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;

// 首 ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



[ 此文章被panasonic732在2004-12-20 23:27重新編輯 ]



獻花 x0 回到頂端 [樓 主] From:未知地址 | Posted:2003-05-21 10:16 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.016273 second(s),query:15 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言