如何用SDL_ttf获取指定字体与文本的宽高?
获取SDL_ttf文本宽高的封装方案
SDL_ttf官方提供的TTF_SizeText/TTF_SizeUTF8是通过指针输出宽高的,要实现直接返回宽高的形式,只需自己封装一层函数即可,以下是具体实现:
C语言实现
- 先定义存储宽高的结构体,再封装返回该结构体的函数:
#include <SDL_ttf.h> typedef struct { int width; int height; } TextDimensions; TextDimensions get_text_dimensions(TTF_Font* font, const char* text) { TextDimensions dims = {0, 0}; if (font != NULL && text != NULL) { // 若需处理UTF-8编码的多语言文本,替换为TTF_SizeUTF8 TTF_SizeText(font, text, &dims.width, &dims.height); } return dims; }
- 使用示例:
TTF_Font* my_font = TTF_OpenFont("font.ttf", 24); TextDimensions text_size = get_text_dimensions(my_font, "测试文本"); // 直接访问text_size.width和text_size.height获取宽高
C++语言实现
可以利用标准库的std::pair直接返回宽高对,或自定义结构体:
用std::pair实现
#include <SDL_ttf.h> #include <utility> std::pair<int, int> get_text_dimensions(TTF_Font* font, const char* text) { int w = 0, h = 0; if (font && text) { TTF_SizeUTF8(font, text, &w, &h); // 优先用UTF-8适配多语言场景 } return {w, h}; }
- C++17及以上使用示例(支持结构化绑定):
auto [text_width, text_height] = get_text_dimensions(my_font, "Hello SDL_ttf"); // 直接使用text_width和text_height变量
- 旧版C++兼容使用方式:
std::pair<int, int> text_size = get_text_dimensions(my_font, "Hello SDL_ttf"); int text_width = text_size.first; int text_height = text_size.second;
内容的提问来源于stack exchange,提问作者Keshav V.
相关产品推荐
相关产品推荐

