【问题标题】:TTF_RenderTextSolid() returns a Surface with 1 byte per pixel?TTF_RenderTextSolid() 返回一个每像素 1 个字节的 Surface?
【发布时间】:2014-07-27 00:21:50
【问题描述】:

这段代码:

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

【问题讨论】:

    标签: c++ sdl pixels truetype sdl-ttf


    【解决方案1】:

    看起来它正在做the documentation 所说的应该做的事情:

    固体

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

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

    混合

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

    【讨论】:

      【解决方案2】:

      自我回答:

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

      【讨论】:

        猜你喜欢
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 2012-03-13
        • 2015-12-21
        相关资源
        最近更新 更多