获取字体点阵

CMatrix<int, int> COpenGLFont::GetMatrix( UINT nChar )
{
 CMatrix<int,int> matrix( 64, 64, 0);


 GLYPHMETRICS gm;
 memset( &gm, 0, sizeof(gm));
 
 MAT2 mat2;
 mat2.eM11.value = 1; mat2.eM11.fract = 0;
 mat2.eM12.value = 0; mat2.eM12.fract = 0;
 mat2.eM21.value = 0; mat2.eM21.fract = 0;
 mat2.eM22.value = 1; mat2.eM22.fract = 0;  
 
 DWORD cbBuffer = ::GetGlyphOutline( m_hDC
  , nChar
  , GGO_BITMAP
  , &gm
  , 0l
  , NULL
  , &mat2
  );
 
 if( cbBuffer == GDI_ERROR )
 {
  ASSERT( FALSE );
  return matrix;
 }

 LPBYTE lpvBuffer = new BYTE[cbBuffer];

 cbBuffer = GetGlyphOutline( m_hDC
  , nChar
  , GGO_BITMAP
  , &gm
  , cbBuffer
  , lpvBuffer
  , &mat2
  );

 UINT nStride = cbBuffer / gm.gmBlackBoxY;
 int nMargeLeft = gm.gmptGlyphOrigin.x;
 int nMargeTop = 64 - gm.gmBlackBoxY;

 
 for( size_t y = 0; y < gm.gmBlackBoxY; y++)
 {
  for( size_t x = 0; x < nStride; x++)
  {
   for( int k = 0; k < 8; k++)
   {
    if( ( lpvBuffer[y*nStride+x] >> (7-k) ) & 1 ) 
    {
     matrix.SetElem( nMargeTop + y, 8 * x + k + nMargeLeft, 1);
    }
   }
  }
 }

 delete [] lpvBuffer;

 return matrix;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值