C++ SDL和zlib问题,无法从zip创建有效的rwops结构

C++ SDL和zlib问题,无法从zip创建有效的rwops结构,c++,sdl,zlib,C++,Sdl,Zlib,我一直在尝试读取zip存档并从中加载png图像,但是我从SDL_图像中得到无效的图像格式错误。这是密码 #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 #inc

我一直在尝试读取zip存档并从中加载png图像,但是我从SDL_图像中得到无效的图像格式错误。这是密码

#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;
}
我收到错误IMG\U Load\U RW:%s不支持的图像格式 好的,如果直接从解压文件加载,它使用IMG_load()工作,在通过sdl创建rwops结构并使用

    IMG_Load_RW(SDL_RWFromFile(filename.c_str(), "rb"), 1);

因此文件格式很好,所有zlib和minizip函数都不会返回任何错误,我检查了info结构,数据与我试图加载的文件一致,因此错误出现在创建rwops结构的某个地方。

问题如下。您正在使用RWOPs结构表单SDL。在给定的情况下,您希望从内存中读取但在读取内存之前,您会删除它。RWOPs结构不会复制内存,它需要在读取所有内容之前保持有效


要解决此问题,请在调用
free(buffer)之前将调用拉到
IMG\u Load\u RW

unzLocateFile的结果是什么?它的UNZ_OK,直到unzReadCurrentFile的结果都是OK的,即使SDL_RWFromMem返回一个非空的rwops结构,但IMG_Load_RW认为它是无效的…:(还有,把缓冲区保存到磁盘上,看看是否有合适的图像。另外,如果你知道这是一个PNG,试试它是否与IMG_LoadPNG_RW一起工作。忽略我,我想我得到了它…30秒后回答…我觉得很愚蠢,我假设缓冲区被复制到rwops结构,我猜rwops只是用add指向缓冲区sdl的传统信息…我现在正在工作,我现在不能尝试,我会回家检查,谢谢
    IMG_Load_RW(SDL_RWFromFile(filename.c_str(), "rb"), 1);