望各位大侠赐教:
我调用pdc->GetGlyphOutline(uChar,GGO_BITMAP,&glyph,cbBuf,pBuf,&mat)获得字模点阵,使用汉子“二”。glyph.gmBlackBoxY=10,glyph.gmBlackBoxX=29。如何输出这个点阵?我想在32×32的点阵中输出,如何确定点阵左上角的坐标?glphy.gmptGlyphOrigin具体是怎么用的?
我设置字体宽和高是16×16,点阵却是29×10。有办法得到16×16的点阵吗?或者我的方法不对?
是要保存在位图中再处理吗?可是我对位图使用还一无所知。
最好能给出一个vc6.0的实例,哪位大侠有使用getGlyphOutline的GGO_BITMAP,然后利用所得点阵输出字的例子请发给我,万分感激!保证给分!
我调用pdc->GetGlyphOutline(uChar,GGO_BITMAP,&glyph,cbBuf,pBuf,&mat)获得字模点阵,使用汉子“二”。glyph.gmBlackBoxY=10,glyph.gmBlackBoxX=29。如何输出这个点阵?我想在32×32的点阵中输出,如何确定点阵左上角的坐标?glphy.gmptGlyphOrigin具体是怎么用的?
我设置字体宽和高是16×16,点阵却是29×10。有办法得到16×16的点阵吗?或者我的方法不对?
是要保存在位图中再处理吗?可是我对位图使用还一无所知。
最好能给出一个vc6.0的实例,哪位大侠有使用getGlyphOutline的GGO_BITMAP,然后利用所得点阵输出字的例子请发给我,万分感激!保证给分!
DWORD dwErr = GetLastError();
lpvBuffer=new char[cbBuffer];
cbBuffer=pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,cbBuffer,lpvBuffer,&m2);
int nStride = cbBuffer / gm.gmBlackBoxY;
for(int y=0;y<gm.gmBlackBoxY;++y)
for(int x=0;x<nStride;++x)
for(int k=0;k<8;++k)
if((lpvBuffer[y*nStride+x]>>(7-k))&1)
pdc->SetPixel(8*x+k,y,RGB(255,0,0));
参见 http://community.csdn.net/Expert/topic/4182/4182636.xml?temp=.2751276
比16大,尽管设置字体是16×16的。
就找到这个资料http://blog.csdn.net/hazy/archive/2005/06/22/400602.aspx
void CDlgDlg::OnButton2()
{
CDC *pDC = GetDC();
CFont font;
VERIFY(font.CreateFont(
72, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet ANSI_CHARSET DEFAULT_CHARSET
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
"宋体")); // lpszFacename
pDC->SelectObject(&font); int c = 0xbbf0; //火 GLYPHMETRICS gm;
MAT2 mat2;
memset(&mat2,0,sizeof(mat2));
mat2.eM11.value = 1;
mat2.eM12.value = 0;
mat2.eM21.value = 0;
mat2.eM22.value = 1;
int len;
len = pDC->GetGlyphOutline(c,GGO_BITMAP,&gm,0,0,&mat2);
if(len == -1)return;
char *buf = new char[len];
pDC->GetGlyphOutline(c,GGO_BITMAP,&gm,len,buf,&mat2); unsigned char *pData = (unsigned char*)buf;
unsigned int cnt = gm.gmBlackBoxX / 32 + (gm.gmCellIncX % 32 ? 1 : 0);
cnt *= 4; int xoffset;
int yoffset; OUTLINETEXTMETRIC otm;
memset(&otm,0,sizeof(otm));
otm.otmSize = sizeof(otm);
pDC->GetOutlineTextMetrics(sizeof(otm),&otm); xoffset = gm.gmptGlyphOrigin.x; //x的偏移量
//y的偏移量 字的顶部 - y方向原点 都是相对于baseline
yoffset = otm.otmAscent - gm.gmptGlyphOrigin.y; for(unsigned int row = 0; row < gm.gmBlackBoxY; row++)
{
for(unsigned int col = 0; col < cnt;col++)
{
for(unsigned int i = 0; i < 8; i++)
{
if((*pData) & (0x80 >> i))
{
pDC->SetPixel(xoffset + (col * 8 + i),yoffset + row,0);
}
}
pData++;
}
} delete []buf;
ReleaseDC(pDC);
}