【发布时间】:2014-12-05 03:15:45
【问题描述】:
我有一个uint8_t 数组,它代表一张灰度图片,其中每个像素都是一个uint8_t。我想在使用 SDL2 库的窗口中显示它。
我试图通过这样做从数组中创建一个 SDL_Surface
mSurface = SDL_CreateRGBSurfaceFrom(mData, mWidth, mHeight, 8, mWidth, 0xFF0000, 0xFF0000, 0xFF0000, 0xFF0000);
但是,问题是当一个 8 位的深度被传递给 SDL_CreateRGBSurfaceFrom 时(就像我在这里所做的那样),根据SDL2 wiki“如果深度是 4 位或 8 位,则为表面分配一个空调色板” 。如果不是这样,我就可以告诉 SDL 每个像素是一个字节,并将该字节用于 R、G 和 B 值。
我想要每像素 8 位的深度,因为我的数据就是这样存储的,但我不想使用调色板。
有什么方法可以让 SDL 不假定我想要一个调色板,而只显示带有 r、g 和 b 掩码都设置为该字节的图像?
我了解另一种解决方案是将我的灰度图像转换为 RGB,方法是将每个字节复制 3 次,然后显示它。但是,如果可能的话,我想避免这样做,因为所有复制都会很慢。
【问题讨论】:
标签: c++ sdl sdl-2 grayscale surface