我一直在尝试改变TTF文本的颜色,但我不知道如何做到这一点。我有:
SDL_Color color_text = { 0, 0, 0 }; //Text color SDL_Surface * surface = TTF_RenderText_Solid(font, "text text text text text ", color_text);
但看起来它不能以任何方式改变颜色。如果有必要和可能的话,我可以用另一种方式存储颜色。
mftmpeh81#
为了改变文本的任何属性,你需要重新渲染文本。
假设你从一个黑色文本开始,你会有这个:
SDL_Color color_text = { 0, 0, 0 }; // Text color SDL_Surface* surface = TTF_RenderText_Solid(font, "TEXT", color_text)
这将使"TEXT"为黑色,因为{ 0, 0, 0 }是黑色的RGB代码。如果要将其设为红色,可以操作值,例如:
"TEXT"
{ 0, 0, 0 }
color_text.r = 255; SDL_Surface* surface = TTF_RenderText_Solid(font, "TEXT", color_text)
这将使"TEXT"成为红色,因为color_text的r成员被设置为255,使color_text的成员{ 255, 0, 0 }成为红色的RGB代码。
color_text
r
255
{ 255, 0, 0 }
vcirk6k62#
这实际上是可能的,而不需要重新渲染文本:如果您最初应用白色,您可以在表面上使用SDL_GetSurfaceColorMod,或在从其创建的纹理上使用SDL_GetTextureColorMod,以便文本变为彩色复制(例如,在文本中添加SDL_GetTextureColorMod)。例如,到您的主窗口)与SDL_BlitSurface/SDL_RenderCopy。
SDL_GetSurfaceColorMod
SDL_GetTextureColorMod
SDL_BlitSurface
SDL_RenderCopy
2条答案
按热度按时间mftmpeh81#
为了改变文本的任何属性,你需要重新渲染文本。
假设你从一个黑色文本开始,你会有这个:
这将使
"TEXT"
为黑色,因为{ 0, 0, 0 }
是黑色的RGB代码。如果要将其设为红色,可以操作值,例如:
这将使
"TEXT"
成为红色,因为color_text
的r
成员被设置为255
,使color_text
的成员{ 255, 0, 0 }
成为红色的RGB代码。vcirk6k62#
这实际上是可能的,而不需要重新渲染文本:
如果您最初应用白色,您可以在表面上使用
SDL_GetSurfaceColorMod
,或在从其创建的纹理上使用SDL_GetTextureColorMod
,以便文本变为彩色复制(例如,在文本中添加SDL_GetTextureColorMod
)。例如,到您的主窗口)与SDL_BlitSurface
/SDL_RenderCopy
。