TTF_RenderTextSolid()返回一个每像素1字节的曲面

TTF_RenderTextSolid() returns a Surface with 1 byte per pixel?

本文关键字:像素 字节 曲面 RenderTextSolid 返回 TTF 一个      更新时间:2023-10-16

代码:

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字节。有人知道为什么会这样吗?

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

固体

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

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

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

自我回答:

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