望各位大侠赐教:
我调用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,然后利用所得点阵输出字的例子请发给我,万分感激!保证给分!

解决方案 »

  1.   

    int cbBuffer = dc.GetGlyphOutline(nChar,GGO_BITMAP,&gm,0L,NULL,&m2);
    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
      

  2.   

    那篇文章我看过,但输出的点阵并不是你想要的.比方说我要16×16的点阵,gm.gmBlackBoxX
    比16大,尽管设置字体是16×16的。
      

  3.   

    帮你google了一把
    就找到这个资料http://blog.csdn.net/hazy/archive/2005/06/22/400602.aspx
      

  4.   

    http://support.microsoft.com/kb/q97340/
      

  5.   

    试试如下代码
    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);
    }
      

  6.   

    http://msdn.microsoft.com/library/en-us/dnvbdev00/html/rodfig3.jpg