我想获得汉字点阵,通过查一些资料,了解方法,但是在动手过程,有些怎么也想不明白?
   CClientDC DC(this);
/*******************************************/  
   //省去了其它没有必要弄出来的代码
    if(!(fdlg.DoModal()==IDOK))
    {
      MessageBox("未设置字体");
      return;
    }
    fdlg.GetCurrentFont(&lfont); //我选择是宋体,12号 查到资料说16*16点阵
    font.CreateFontIndirect(&lfont);
    oldfont=DC.SelectObject(&font); 
/*******************************************/
          UCHAR FtBuf[3] = "一";//我用汉字"一,二"
          UINT ch;   
   ch = ((FtBuf[0]<<8)|(FtBuf[1]&0xff));       cbBuffer=DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,0,NULL,&m2);//返回大小
     if( cbBuffer == -1)
 {
        MessageBox("Error","Error",MB_OKCANCEL);
return ;
 }
     else
 {
         cbuf = new BYTE[cbBuffer];
         cbBuffer = DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,cbBuffer,cbuf,&m2);     
         }
   我这里出现疑问就是:
   当用汉字"一","二",cbBuffer返回值不一样,对应是8和48,所以我就迷糊了,怎么得到点阵数据大小有区别,我同样的选择宋体12号啊?如果选择字体大小不一样,对应点阵关系是怎么样的?
   比如说:12号是16*16点阵,那14号字体,20号字体,这里有一个对应关系吗?
   另外还问一个问题就是:在返回的数据中,cbuf(点阵数据),是怎么样的结构?我找了好久也没有找到这个方面的资料,哪位大虾能提供这个方面资料,感谢谢不尽!我会重新开一个贴,重新给分!

解决方案 »

  1.   

    四楼兄弟的意思是:做BMP?然读出点阵信息?
      

  2.   

    能告诉我怎么解决的吗?
    我当时做8位游戏工具的时候,一个RPG游戏需要16*16点阵字库的支持.当时使用的是hzk16字库
      

  3.   

    If GGO_BITMAP, GGO_GRAY2_BITMAP, GGO_GRAY4_BITMAP, GGO_GRAY8_BITMAP, or GGO_NATIVE is specified and the function succeeds, the return value is greater than zero; otherwise, the return value is GDI_ERROR. If one of these flags is specified and the buffer size or address is zero, the return value specifies the required buffer size, in bytes. If GGO_METRICS is specified and the function fails, the return value is GDI_ERROR. 
      

  4.   

    The glyph bitmap returned by GetGlyphOutline when GGO_BITMAP is specified is a DWORD-aligned, row-oriented, monochrome bitmap.
      

  5.   

    看看这个LPTTPOLYGONHEADERLPTTPOLYCURVE
      

  6.   

    关于cbBuffer的大小要参考GLYPHMETRICS结构,是黑色区域占的最小矩形,“二”当然要比“一”大。如果不出意外,“国”和“回”大小差不多。
      

  7.   

    typedef struct _GLYPHMETRICS { // glmt 
        UINT  gmBlackBoxX; 
        UINT  gmBlackBoxY; 
        POINT gmptGlyphOrigin; 
        short gmCellIncX; 
        short gmCellIncY; 
    } GLYPHMETRICS; 
    四字据时候填充数据的时候,
    if( (gmBlackCellIncX%32) != 0)
       gmBlackBoxX/32+1和gmBlackCellIncX/32+1取小来决定4字节宽度(就是一行宽度)
       得到数扰cbBuffer大小由(gmBlackCellIncX/32+1)*4*gmBlackBoxY;
       我自己总结出来的,希望对有需要能用上...
      

  8.   

    请问 怎么获得 用控件选择不同字体 计算出字符串 的宽度int fun(所选字体类别,字高,字符串); // 计算出字符串所站距型长宽字体不同 宽度不同 怎么才能知道它的实际宽度那?实际上 这个软件要做成 多国语言版 在不同的操作系统下 字体有可能超出用户界面所以我要先知道字体的宽和高 然后再对其进行截取请各位哥哥 看下我出的接口 今天听说可以用 点阵 来计算宽度 不知道是否可以? 关于点阵 我一点也不了解知道的朋友请指点下