3

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サポートされていない画像形式まあ、解凍したファイルから直接ロードする場合は、IMG_Load()を使用して機能し、sdlを介してrwops構造を作成し、

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

したがって、ファイル形式は問題ありません。すべてのzlibおよびminizip関数はエラーを返しません。情報構造体を確認し、データがロードしようとしているファイルと一致しているため、エラーはrwops構造体の作成のどこかにあります。

4

1 に答える 1

3

問題は次のとおりです。SDLからRWOP構造を使用しています。与えられたケースでは、あなたはメモリから読みたいです。しかし、あなたはそれを読む前にメモリを削除します。RWOPs構造体はメモリをコピーしません。すべてが読み取られるまで、有効なままである必要があります。

問題を解決するには、への呼び出しIMG_Load_RWの前にへの呼び出しをプルしますfree(buffer);

于 2013-03-08T15:29:17.227 に答える