TTF_RenderTextSolid()返回一个每像素1字节的曲面
TTF_RenderTextSolid() returns a Surface with 1 byte per pixel?
代码:
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将其更改为规则曲面。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 每像素字节数,每行字节数-如何在tess二的tessbaseapi.cpp中使用函数nativeSetImageByte
- 如何使用C++正确计算BMP图像中每像素的字节数
- 奇怪的SDL_Surface->格式->字节每像素值
- TTF_RenderTextSolid()返回一个每像素1字节的曲面
- OpenGL转换RGBA字节像素到图像整数数组