1

这段代码:

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;

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

4

2 回答 2

2

看起来它正在做文档所说的应该做的事情:

坚硬的

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

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

混合

创建一个 32 位 ARGB 表面并以高质量渲染给定文本,使用 alpha 混合以给定颜色抖动字体。这会产生一个具有 alpha 透明度的表面,因此文本周围没有纯色框。文本是抗锯齿的。这将比实体渲染慢,但与着色模式的时间大致相同。生成的曲面会比使用 Solid 或 Shaded 慢。当您想要高质量并且文本变化不会太快时使用它。

于 2014-06-06T05:03:41.223 回答
0

Self Answer:

TTF_RenderTextSolid() returns a surface in false color. This means that it is kind of like black and white but white is a color you have defined and black is just the opposite of that color (which is usually completely transparent). It can be changed into a regular surface by using SDL_ConvertSurface.

于 2014-06-08T16:12:42.063 回答