vpoint.clear();
int aaa=m_editfont.getlength();
glyphmetrics gm;
dword dwsize;
handle hmem;
lpttpolygonheader lpph;
lpbyte lpb;
long cboutline, cbtotal;
hwnd hwnd1;
crect rect1;
getdlgitem(picture1,&hwnd1);
::getwindowrect(hwnd1,&rect1);
screentoclient (&rect1);
hdc hdc=::getdc(hwnd1);
cdc dc1;
dc1.attach(hdc);
m_font1.createfontindirect(&m_type.info);
dc1.selectobject(&m_font1);
mat2 m2;
m2.em11 = floattofixed(1.0);
m2.em12 = floattofixed(0.0);
m2.em21 = floattofixed(0.0);
m2.em22 = floattofixed(1.0);
for(int i=0;iuint uchar;//判斷是漢字還是字元
if (m_editfont.getat(i) >= 0)
uchar = m_editfont.getat(i);
else
int th = m_editfont.getat(i);
int tl = m_editfont.getat(i+1);
uchar = ((th & 0x00ff)<<8) + (tl & 0x00ff);
i++;
dwsize = dc1.getglyphoutline(uchar,ggo_native,&gm,0l,null,&m2); //獲得外輪廓資訊
hmem=globalalloc(ghnd,dwsize);//分配記憶體
lpph=(lpttpolygonheader)globallock(hmem);//獲得記憶體控制代碼
dc1.getglyphoutline(uchar,ggo_native,&gm,dwsize,lpph,&m2); //獲得外輪廓資訊
cbtotal = dwsize;//獲得折點所佔緩衝區的大小
cpoint p1;
p1.x=-1;
p1.y=-1;
vpoint.push_back(p1);
while( cbtotal > 0 )//有多個
hwnd hwnd1;
getdlgitem(picture1,&hwnd1);
hdc hdc=::getdc(hwnd1);
cdc dc1;
dc1.attach(hdc);
int xold = mapfxy( lpph->pfxstart.x );//座標轉化
int yold = mapfxy( lpph->pfxstart.y );//座標轉化
p1.x=xold;
p1.y=200-10-yold;
dc1.moveto(xold,200-10-yold);
vpoint.push_back(p1);
lpb = (lpbyte)lpph + sizeof(ttpolygonheader);//ttpolygonheader為truetype字型檔頭結構
//lpb指向弧線描述的首位址
cboutline = (long)lpph->cb - sizeof(ttpolygonheader);//獲得所有
while( cboutline > 0 )
int n;
lpttpolycurve lpc;
lpc = (lpttpolycurve)lpb;
//lpttpolycurve定義了字型的乙個弧度,其中包括 是否直線 二次b樣條 3次b樣條
//以及描述點的個數
此結構表示truetype字型外輪廓線的一條曲線
typedef struct tagttpolycurve ttpolycurve, far* lpttpolycurve;
drawoutline(&dc1,lpc->wtype,lpc->cpfx,lpc->apfx, 0, 0); //畫曲線
int count=lpc->cpfx;//獲得點結構的個數
for (int i=0;ip1.x=mapfxy(lpc->apfx[i].x);
p1.y=mapfxy(lpc->apfx[i].y);
// point.push_back(p1);
n = sizeof(ttpolycurve) + sizeof(pointfx) * (lpc->cpfx - 1);
//n是每個線條點所佔的區域大小
lpb += n;//曲線組下移
cboutline -= n;
dc1.lineto(xold,200-yold-10);//畫結束線
p1.x=xold;
p1.y=200-10-yold;
vpoint.push_back(p1);
p1.x=-1;
p1.y=-1;
vpoint.push_back(p1);
cbtotal -= lpph->cb;//檔案下移
lpph = (lpttpolygonheader)lpb;
獲取TrueType字型資訊
對truetype字型有一定了解的人,相信一定對windows中fonts資料夾中中文字庫案顯示的名字感到好奇。將中文字型複製到該目錄下顯示的是中文字型名,而將該字型複製到其它位置則沒有享受到該待遇變成一串英文了,該文將講述該實現背後的秘密。truetype字型有乙個檔案頭和很多表組成,具體結構如下...
為 LaTeX 新增英文 TrueType 字型
在windows miktex環境下,新增中文字型最方便的辦法恐怕是使用 hooklee 的 xgbkfonts 工具 http hooklee.tex.html 在 linux 環境下,王垠改進的 gbkfonts http learn.tsinghua.edu.homepage 20013154...
java 獲取系統字型
獲取系統字型對應全路徑map return map public static mapgetfontpathmap for font font fonts if stringutil.stringrepeatnum fontfilepath,1 fontpathmap.put font.getfon...