SDL_Image libpng 错误:不是 PNG 文件
SDL_Image libpng error: Not a PNG file
我尝试使用以下SDL_Image加载 png 图像:
代码
int fname_len = 1024;
char fname[fname_len];
string pwd = getcwd(fname,fname_len);
strcat(fname,"/i/avatar.png");
struct stat buf;
if(stat(fname, &buf)) error("File does not exists",fname);
SDL_RWops *rwop = SDL_RWFromFile(fname, "rb");
SDL_Surface *img = 0;
img = IMG_LoadPNG_RW(rwop); // 6
if(!img) error("Failed to load",fname);
SDL_Texture *tx = tex[z] = SDL_CreateTextureFromSurface(ren, img); // 5
SDL_FreeSurface(img); // ~6
if(!tx) error("Failed to create texture from",fname);
项目文件
LIBS += -L/usr/lib -lSDL2 -lSDL_image
当我运行它时,它显示一个错误:
Failed to load '/tmp/mygame/i/avatar.png': Error reading the PNG file.
libpng error: Not a PNG file
当它尝试运行file
命令时,它确实存在:
# file /tmp/mygame/i/avatar.png
/tmp/mygame/i/avatar.png: PNG image data, 34 x 24, 8-bit/color RGBA, non-interlaced
ldd
命令的结果是:
# ldd /tmp/mygame/mygame
linux-vdso.so.1 (0x00007fffe9400000)
libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007f0dd39b0000)
libSDL_image-1.2.so.0 => /usr/lib/libSDL_image-1.2.so.0 (0x00007f0dd3790000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f0dd3488000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f0dd3270000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f0dd2ec8000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f0dd2bc0000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f0dd29b8000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f0dd2798000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f0dd2590000)
libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0x00007f0dd22f8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0dd3c98000)
在我的计算机上安装和可安装的 libpng* 库:
1 extra/libpng 1.6.9-1 [installed]
2 community/libpng12 1.2.50-4 [installed]
3 multilib/lib32-libpng 1.6.8-1 [installed]
4 multilib/lib32-libpng12 1.2.50-2 [installed]
5 catalyst/libpng12 1.2.50-1
6 aur/devkitppc-portlibs-libpng 1.5.4-2 (6)
7 aur/k3d-libpng.patch 0.8.0.1-1 (2)
8 aur/lib32-libpng14 1.4.12-1 (93)
9 aur/lib32-libpng15 1.5.18-1 (34)
10 aur/libpng-old 1.0.2-2 (8)
11 aur/libpng14 1.4.13-2 [installed] (251)
12 aur/libpng15 1.5.18-1 (121)
我做错了哪一部分?
从注释转换:
问题是您已经链接到SDL2
和SDL_image
。后者是库的 1.2 版本,旨在与 SDL 1.2 兼容。
时,请始终使用其库的 SDL2 版本,例如 SDL2_image、SDL2_mixer 等。
相关文章:
- 检查输入是否不是整数或数字
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么使用SFINAE而不是函数重载
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 为什么std::valarray不是算术的
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- MSVC是否支持C++11样式的属性而不是__declspec
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 为什么make_tie不是一件事
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 为什么std::isnan 不是 constexpr?
- GlobalAlloc而不是其他分配方法
- 当比特(而不是字节)的顺序至关重要时的持久性
- 为什么复制而不是移动数据元素?
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- SDL_Image libpng 错误:不是 PNG 文件
- 将 PNG 加载代码转换为使用 FILE 而不是本地资源
- MFC:如何创建使用透明 PNG 作为后行(而不是窗口镶边)的瘦身对话框