0

我正在使用 SDL 的 IMG_Load() 函数在 Linux 和 Mac OS X 上加载 PNG 文件。它可以工作,但奇怪的是,在 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

从文件输出来看,我认为 24​​bpp 是正确的。

知道为什么会发生这种情况以及如何规避这种情况吗?

4

1 回答 1

1

image is a new surface and isn't guaranteed to have the same bpp of the original .png.

If you just need to print the format info from the .png I guess should be easy to access the header with a custom function or at least using the libpng.

If you need to blit with the loaded image you have two option:

  • support both the bpp formats where is needed in your app
  • create a new surface with your desired bpp and convert image once loaded
于 2013-09-06T12:44:36.000 回答