基于FreeType2实现跨平台的字幕叠加的类

本文介绍了一个基于FreeType2库的类,该类能够将文本转换为RGB点阵,并能进行RGB到YUV的转换,同时支持将RGB数据保存为BMP文件。类中包含初始化、释放资源、文本图像尺寸计算、绘制文本、获取RGB及YUV图像和保存为BMP文件的方法。
摘要由CSDN通过智能技术生成

这个类实现了把一个字符串转成RGB点阵,RGB转YUV,和把RGB点阵保存成BMP文件。点阵数据可以直接往其他背景上叠加。

TextToImageFT::TextToImageFT(void)
{
 m_rgb24Buff = NULL;
 m_yuvBuff = NULL;
 expanded_data = NULL; 
}

TextToImageFT::~TextToImageFT(void)
{
 if(m_rgb24Buff)
  free(m_rgb24Buff);
 m_rgb24Buff = NULL;

 if(m_yuvBuff)
  free(m_yuvBuff);
 m_yuvBuff = NULL;

 if(expanded_data)
   free(expanded_data); 
 expanded_data = NULL;
}

int TextToImageFT::InitFT(const char * fname, unsigned int nHeight)
{
 ftHeiht = nHeight;
    //初始化FreeType库..
 if (FT_Init_FreeType( &ftLibrary ))
 {
  printf("FT_Init_FreeType failed");
  return -1;
 }
 //加载一个字体,取默认的Face,一般为Regualer
 if (FT_New_Face( ftLibrary, fname, 0, &ftFace))
 {
  printf("FT_New_Face failed (there is probably a problem with your font file)");
    return -1;
 }
 //大小要乘64.这是规定。照做就可以了。
 FT_Set_Char_Size(ftFace,ftHeiht << 6, ftHeiht << 6, 96, 96);
 

#if 0
 FT_Matrix matrix;

 FT_Vector pen;
 //给它设置个旋转矩阵
 float angle = (float) -0/180.* 3.14;
 matrix.xx = (FT_Fixed)( cos( angle ) * 0x10000L );
 matrix.xy = (FT_Fixed)(-sin( angle ) * 0x10000L );
 matrix.yx = (FT_Fixed)( sin( angle ) * 0x10000L );
 matrix.yy = (FT_Fixed)( cos( angle ) * 0x10000L );
 FT_Set_Transform( ftFace, &matrix, &pen );
#endif
 
 return 0;
}
int TextToImageFT::FreeFT()
{
 FT_Done_Face(ftFace);
 FT_Done_FreeType(ftLibrary);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值