我一直在尝试读取 zip 存档并从中加载 png 图像,但是我收到了来自 SDL_Image 的无效图像格式错误。这是代码
#include <SDL\SDL.h>
#include <SDL\SDL_opengl.h>
#include <SDL\SDL_image.h>
#define ZLIB_WINAPI //to use zlibwapi dll
#include <zlib.h>
#include <zip.h> //minizip
#include <unzip.h> //minizip
#include <string>
SDL_RWops* readfromarchive(std::string archive, std::string filename)
{
unzFile data;
unz_file_info info;
Uint8* buffer = NULL;
SDL_RWops* rw = NULL;
data = unzOpen(archive.c_str());
unzLocateFile( data, filename.c_str(), 1 );
unzGetCurrentFileInfo( data, &info, NULL, 0, NULL, 0, NULL, 0 );
unzOpenCurrentFile( data );
buffer = (Uint8*)malloc(info.uncompressed_size);
unzReadCurrentFile( data, buffer, info.uncompressed_size );
rw = SDL_RWFromMem(buffer, info.uncompressed_size);
free(buffer);
unzClose(data);
return rw;
}
当我这样做时
Surf_Temp = IMG_Load_RW( readfromarchive(archive, filename) , 1);
我收到错误 IMG_Load_RW: %s Unsupported image format 好吧,如果直接从解压缩文件加载,它可以使用 IMG_Load(),在通过 sdl 创建 rwops 结构并加载时也可以使用
IMG_Load_RW(SDL_RWFromFile(filename.c_str(), "rb"), 1);
所以文件格式很好,所有 zlib 和 minizip 函数都没有返回任何错误,我检查了 info 结构并且数据与我尝试加载的文件一致,所以错误出现在创建 rwops 结构的某个地方。