TTF_RenderTextSolid()返回一个每像素1个字节的Surface?

时间:2014-06-05 20:38:03

标签: c++ sdl pixels true-type-fonts sdl-ttf

此代码:

TTF_Font * titania = TTF_OpenFont( "chintzy.ttf",28);
SDL_Color textColor = {255,255,0};
SDL_Surface * textSurface = TTF_RenderText_Solid(titania,"Its Working!",textColor);
std::cout << (int)textSurface->format->BytesPerPixel;

打印第一个,这意味着TTF_RenderTextSolid返回的表面每个像素有一个字节。如果我是正确的,它应该是每像素4个字节。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

看起来它正在完成the documentation所说的应该:

  

实心

     

创建 8位调色表面,并使用给定的字体和颜色以快速质量渲染给定文本。像素值0是colorkey,在blitted时给出透明背景。像素和色彩映射值1设置为文本前景色。这允许您更改颜色,而无需再次渲染文本。调色板索引0当然不是在blitted到另一个表面时绘制的,因为它是colorkey,因此是透明的,尽管它的实际颜色是255减去前景颜色的每个RGB分量。这是所有渲染模式中最快的渲染速度。这导致文本周围没有框,但文本不那么流畅。得到的表面应该比混合表面快。将此模式用于FPS和其他快速更改的更新文本显示。

如果你想要32bpp,你需要使用*_Blended()变体:

  

混纺

     

创建一个32位ARGB曲面并以高质量渲染给定文本,使用alpha混合来使用给定颜色抖动字体。这会导致表面具有Alpha透明度,因此您不会在文本周围显示纯色框。该文是抗锯齿的。这将比Solid更慢,但与着色模式大致相同。生成的曲面将比使用“实心”或“阴影”时更慢。当您想要高质量时,请使用此选项,并且文本不会变化太快。

答案 1 :(得分:0)

自答:

TTF_RenderTextSolid()以假色返回表面。这意味着它有点像黑色和白色,但白色是您定义的颜色,黑色恰好与该颜色相反(通常是完全透明的)。可以使用SDL_ConvertSurface将其更改为常规表面。