首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

GetGlyphOutline怎么获取汉字的点阵数据

2012-05-04 
GetGlyphOutline如何获取汉字的点阵数据?最近的工作要用到windows api取汉字的点阵数据,我查阅了一些资料,

GetGlyphOutline如何获取汉字的点阵数据?
最近的工作要用到windows api取汉字的点阵数据,我查阅了一些资料,能去除英文字母的点阵数据,但无法正确地取出汉字的点阵数据。

核心代码段如下:

 case WM_PAINT:
  hdc = BeginPaint (hwnd, &ps) ;
//hdc=GetDC(hwnd);
//hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
hFont = EzCreateFont (hdc, TEXT ("楷体_GB2312"), 1440, 0, 0, TRUE) ;
oldFont=(HFONT)SelectObject(hdc,hFont);

//hFont=GetFont();
//oldFont=(HFONT)SelectObject(hdc,hfont);

MAT2mat2;
mat2.eM11 = FixedFromDouble(2);
mat2.eM12 = FixedFromDouble(0);
  mat2.eM21 = FixedFromDouble(0);
  mat2.eM22 = FixedFromDouble(2);
 
GLYPHMETRICS gm;
//chText=L'W';
//chText =L'A';
chText=L'泰';
//ch=str[0] < <8|(str[1]&0xff); 
 

 



dwBufSize=GetGlyphOutline(hdc,chText,GGO_BITMAP,&gm,0,NULL,&mat2);
lpszFunction="GetGlyphOutline";
 
//dw = GetLastError(); 
//if(dw!=0)
//{
//sprintf(szBuf, "%s failed: GetLastError returned %u\n", 
//lpszFunction, dw); 
 //
//MessageBox(NULL, szBuf, "Error", MB_OK); 
//ExitProcess(dw); 
//}
if(dwBufSize!=GDI_ERROR)
{
if(dwBufSize>0 && dwBufSize<0xFFFF)
{
//char* lpBuf=NULL;
//lpBuf=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwBufSize);
//板卡控制
//rtn=GT_Open(0);
//rtn=GT_Reset();
//rtn=GT_ScanCrdClear(0);


LPBYTE lpBuf=(LPBYTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwBufSize);


if(lpBuf)
{

GetGlyphOutline(hdc,chText,GGO_BITMAP,&gm,dwBufSize,lpBuf,&mat2);
...


我个人认为在代码:
  chText=L'泰';//此处还应该针对汉字做进一步处理

dwBufSize=GetGlyphOutline(hdc,chText,GGO_BITMAP,&gm,0,NULL,&mat2);//此处实际调用的是GetGlyphOutlineW

[解决办法]
加入预编译指令:
#define NUM 1000
#ifdef UNICODE
#define GetGlyphOutline GetGlyphOutlineW 
#else
#define GetGlyphOutline GetGlyphOutlineA
#endif

然后从“工程”-“C\C++”-“预处理程序定义”加入“UNICODE”即可

热点排行