VTK汉字显示问题

做项目需要用到VTK的汉字显示功能,经过笔者多日调试,最后找到了一个非常简单的解决方法。

文章首发:http://blog.csdn.net/xlong_t/article/details/41646041

1、VTK是支持Freetype的字体的,编译VTK必须开启Freetype,这是VTK显示汉字的基础。

2、VTK显示汉字,必须指定Freetype字体文件,VTK默认字体是内嵌的英文字符字体。设置字体代码如下:

vtkTextProperty::SetFontFamily( VTK_FONT_FILE )
vtkTextProperty::SetFontFile( path_to_freetype_font )
3、传递给VTK字符串需要使用utf8编码。如果不是,需要调用相关API转换成utf8编码。

4、修改vtkFreeTypeTools::GetGlyphIndex()的实现。可能大家都尝试过以上几个步骤,然后VTK仍然无法显示汉字。原因就是vtkFreeTypeTools::GetGlyphIndex默认使用字体文件的第一个字符映射表去查找字体图形(Glyph),了解过Freetype的童鞋都知道这是不严谨的。因为Freetype可以拥有多个字符映射表,并且不同的映射表支持的编码不同。

需要将
  // Lookup the glyph index
  *gindex = FTC_CMapCache_Lookup(*cmap_cache, face_id, 0, c);
  return *gindex ? true : false;
  
替换为
  // Lookup the glyph index
  FT_Face face = NULL;
  if( 0==FTC_Manager_LookupFace(*CacheManager, face_id, &face))
  {
	  for (unsigned i=0; i<face->num_charmaps; i++)
	  {
		  if(face->charmaps[i]->encoding == FT_ENCODING_UNICODE)
		  {
			  *gindex = FTC_CMapCache_Lookup(*cmap_cache, face_id, i, c);
			  break;
		  }	
	  }
  }
  else
  {
	  *gindex = FTC_CMapCache_Lookup(*cmap_cache, face_id, 0, c);
  }

  return *gindex ? true : false;

总结:

笔者在找解决方法时,也参考过网上的教程,但是感觉都很复杂,需要修改的代码很多。最后仔细思考下,感觉既然VTK能够使用Freetype字体,理论上应该就能显示汉字,笔者就是以这个为基础,耐心寻找原因,最后找到了一条非常省力的解决方法。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值