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”即可