大家看我得代码用得是GGO_BITMAP,我不知道他得到的是什么样的结构,
我想得到字体的点阵数据,最好能够存在数组里,cbBuffer = pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,0L,NULL,&mat2);
lpvBuffer=new char[cbBuffer];
cbBuffer=pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,cbBuffer,lpvBuffer,&mat2);谁能告诉我怎么得到吗?100分相送

解决方案 »

  1.   

    就是点阵,八点成一个字节
    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));
      

  2.   

    可是现在有一个问题,我的那个lpvBuffer设置的是LPVOID类型,不能加减,我要转换为什么类型合适呢?我主要是现在读不出来lpvBuffer所指向内存的内容。
             DWORD cbBuffer=NULL;
    LPVOID lpvBuffer=NULL;
    cbBuffer = pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,0L,NULL,&mat2);
    lpvBuffer=malloc(cbBuffer);
    cbBuffer=pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,cbBuffer,lpvBuffer,&mat2);我这样分配内存对吗?
      

  3.   

    对,转换成什么char*,int*都可以
      

  4.   

    char* lpvBuffer=NULL;
    cbBuffer = pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,0L,NULL,&mat2);
    lpvBuffer=(char*)malloc(cbBuffer);
    cbBuffer=pdc->GetGlyphOutline(nChar,GGO_BITMAP,&gm,cbBuffer,(LPVOID)lpvBuffer,&mat2);