Mac和Linux上的SDL IMG_Load()为同一图像返回不同的BitsPerPixel

时间:2013-09-06 10:56:43

标签: c++ linux image macos sdl

我正在使用SDL的IMG_Load()函数加载一个PNG文件,无论是在Linux上还是在Mac OS X上。它可以工作,但奇怪的是,在Linux上我获得了一个24 BitsPerPixel和OS X的格式32 bpp。

SDL_Surface *image = IMG_Load("path/to/image.png");
std::cerr << (int)image->format->BitsPerPixel << std::endl;

两个系统上的图像文件完全相同。

$ file data/test_scenario.png
data/test_scenario.png: PNG image data, 640 x 400, 8-bit/color RGB, non-interlaced

我认为从文件输出判断24bpp是正确的。

知道为什么会这样,我怎么能绕过这个?

1 个答案:

答案 0 :(得分:1)

image是一个新的表面,并且不保证与原始.png具有相同的bpp。

如果您只需要打印.png猜测中的格式信息,则应该可以使用自定义功能或至少使用libpng轻松访问标题。

如果你需要blit加载图像,你有两个选择:

  • 支持应用中需要的bpp格式
  • 使用您想要的bpp创建一个新曲面,并在加载后转换image