获取TTF字体的点阵信息还是使用GetGlyphOutline
看代码
CClientDC dc(this);HDC hDC = dc.GetSafeHdc();//创建字体CFont font;VERIFY(font.CreateFont(32, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "宋体"));CFont *pOldFont = dc.SelectObject(&font);// 定义并初始化变换矩阵MAT2 mat2; memset(&mat2, 0, sizeof(mat2));mat2.eM11.value = 1;mat2.eM22.value = -1; // 我这里写-1, 字体会倒置, 结合BMP的格式GLYPHMETRICS metrics; // 保存字符相关信息DWORD dwDataSize = 0; // 初始化字符数据缓冲区大小//……// 通过函数GetGlyphOutline()确定存储字符结构的空间wchar_t nChar = L'我';::TextOut(dc.m_hDC, 0, 0, "我", 2);dwDataSize = ::GetGlyphOutlineW(dc.m_hDC, (UINT)nChar, GGO_BITMAP, &metrics, 0, NULL, &mat2);if ((dwDataSize != 0) && (dwDataSize != GDI_ERROR)){CMYBitmap myBitmap;myBitmap.Create(1, metrics.gmBlackBoxX, metrics.gmBlackBoxY, true);dwDataSize = ::GetGlyphOutlineW(dc.m_hDC, (UINT)nChar,GGO_BITMAP,&metrics, myBitmap.m_lBITMAPDATALen, myBitmap.m_pBITMAPDATA, &mat2);char chTemp[MAX_PATH];sprintf(chTemp, "E:\\我.bmp");CMYBitmapReader::SaveBitmap(chTemp, myBitmap);}
点阵数据就是BMP格式的数据, 构建好BMP相关的信息头后即可显示在DC或者保存在BMP文件中
GGO_BITMAP 1位位图
其他的你可以使用8位位图保存, 但注意颜色表的构建.
那些LED显示条, 一个字有16*16点, 有32*32点 等等.
记得以前做过一个程序, 输入文字, 把该文字的转成对应点阵格式. 对于16*16或者32*32的点阵屏, 使用TTF字体的数据提取并不是最好的. 因为提取出来的文字, 特别是中文, 点阵的范围不是很固定(例如你设置字体高度是32, 但提取出来的点阵信息并不一定是32*32的, 有些29, 有些31等等).
16*16或者32*32点阵屏可以找DOS系统中的点阵文件来提取. 如果大于32*32就可以考虑使用TTF来提取, 但是要做一些处理来对齐文字的显示.