提取Windows矢量字库的方法
Windows矢量字库有很多优点,最主要的就是无级缩放。在进行嵌入式开发时常常用到点阵字库,这时候可以从Windows矢量字库中提取,非常方便。只要你的Windows安装了某国语言,就可以方便的得到它的点阵。
具体的代码如下,调用过程 GetCurrentDC(),DrawText(),getImage()
HANDLE m_MemDC=NULL;
char *m_image[WIDTH*HEIGHT];
HDC GetCurrentDC()
{
HDC winDC;
HWND hActiveWnd=::GetActiveWindow();
::DeleteDC(m_MemDC);
if(hActiveWnd==INVALID_HANDLE_VALUE)
return NULL;
winDC=::GetWindowDC(hActiveWnd);
if(winDC!=NULL)
{
m_MemDC=::CreateCompatibleDC(winDC);
if(m_MemDC==NULL)
{
AfxMessageBox("获取内存句柄失败!");
return NULL;
}
SetBkColor(m_MemDC,RGB(0x0,0x0,0x0));
SetTextColor(m_MemDC,RGB(0xFF,0xFF,0xFF));
HBITMAP bitmap=CreateCompatibleBitmap(winDC,640,1024);
SelectObject(m_MemDC,bitmap);
}
return m_MemDC;
}
void DrawText(CString str,int left,int top,int FontSize)
{
if(m_MemDC!=NULL)
{
LOGFONT lf;
CFont font;
CBrush brush(RGB(0x0,0x0,0x0));
COLORREF cr=RGB(0xFF,0xFF,0xFF);
CRect rect(00,00,320,FontSize);
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight=FontSize;
lf.lfWeight=700;
memcpy(lf.lfFaceName,"宋体",5);
// font.CreateFont(14,0,0,0,FW_THIN,0,0,0,DEFAULT_CHARSET,0,0,0,0,"Thamo");
font.DeleteObject();
BOOL b=font.CreateFontIndirect(&lf);
HGDIOBJ pSaveFont = SelectObject(m_MemDC,font);
::DrawText(m_MemDC,str,strlen(str),&rect,DT_CALCRECT);
::DrawText(m_MemDC,str,str.GetLength(),CRect(left,top,rect.Width()+left,FontSize+top),NULL);
//::DrawText(::GetWindowDC(::GetActiveWindow()),"str",3,CRect(left,top,rect.Width()+left,FontSize+top),NULL);
SelectObject(m_MemDC,pSaveFont);
}
}
char *getImage(void)
{
for(int i=0;i<WIDTH/8;i++)
for(int j=0;j<HEIGHT;j++)
{
pix=0;
for(int k=0;k<8;k++)
{
pix<<=1;
if(GetPixel(m_MemDC,i*8+k,j)!=RGB(0,0,0))
pix+=1;
}
m_image[i+j*width/8]=pix;
}
}
posted on 2009-11-06 08:13 常州市润邦电子科技 阅读(1841) 评论(0) 编辑 收藏 举报