渲染一段文字

绘制一个文字比较容易,但用绘制一个文字的方法去绘制一段文字的话,实现起来会很复杂,针对这个问题,可以用 LCUI 提供的文本图层(TextLayer)来解决,除了基本的文本绘制功能外,还具备一下功能:

  • 自定义全局文字的对齐方式
  • 用标签设定其中一段文字的颜色和大小
  • 文本的插入、删除功能,以及光标定位
    LCUI 的文本显示(TextView)部件和文本编辑框(TextEdit)部件就是基于该模块实现的。

以下是简单的示例程序:

  1. #include <LCUI_Build.h>
  2. #include <LCUI/LCUI.h>
  3. #include <LCUI/graph.h>
  4. #include <LCUI/font.h>
  5. int main( void )
  6. {
  7. int ret;
  8. LCUI_Graph img;
  9. LCUI_Pos pos = {0, 80};
  10. LCUI_Rect area = {0, 0, 320, 240};
  11. LCUI_TextLayer txt = TextLayer_New();
  12. LCUI_TextStyle txtstyle;
  13. /* 初始化字体处理功能 */
  14. LCUI_InitFont();
  15. /* 创建一个图像,并使用灰色填充 */
  16. Graph_Init( &img );
  17. Graph_Create( &img, 320, 240 );
  18. Graph_FillRect( &img, RGB( 240, 240, 240 ), NULL, FALSE );
  19. /* 设置文本的字体大小 */
  20. TextStyle_Init( &txtstyle );
  21. txtstyle.pixel_size = 24;
  22. txtstyle.has_pixel_size = TRUE;
  23. /* 设置文本图层的固定尺寸、文本样式、文本内容、对齐方式 */
  24. TextLayer_SetFixedSize( txt, 320, 240 );
  25. TextLayer_SetTextStyle( txt, &txtstyle );
  26. TextLayer_SetTextAlign( txt, SV_CENTER );
  27. TextLayer_SetTextW( txt, L"这是一段测试文本\nHello, World!", NULL );
  28. TextLayer_Update( txt, NULL );
  29. /* 将文本图层绘制到图像中,然后将图像写入至 png 文件中 */
  30. TextLayer_DrawToGraph( txt, area, pos, &img );
  31. ret = Graph_WritePNG( "test_string_render.png", &img );
  32. Graph_Free( &img );
  33. /* 退出字体处理功能 */
  34. LCUI_ExitFont();
  35. return ret;
  36. }

编译运行后,可以在程序所在工作目录下找到 test_string_render.png 文件,打开它可看到如下图所示的内容:

绘制出来的文字

在为 TextLayer 设置文本、修改文字样式后,需要调用 TextLayer_Update() 函数以应用这些更改,该函数的第二个参数是个链表,用于保存文本图层中需要刷新的区域,如果不需要这些数据可以将该参数设置为 NULL。

TextLayer 提供了 TextLayer_DrawToGraph() 函数用于将文本图层绘制到图像中,第二个参数指定 TextLayer 中需要绘制的区域,第三个参数指定绘制出的内容在图像中的位置。

原文: https://docs.lcui.lc-soft.io/zh-cn/font_and_text/render_string.html