我如何从二进制文件读取图像?

我试图把所有的资产放在一个二进制文件中,然后试图从文件本身读取它们,而不是将它们分散在不同的文件夹中,以便让它们暴露。 我想要实现的就像RPG Maker和Wolf Editor用来将所有游戏的图像/声音join一个自定义格式文件(例如Data.wolf)的方式。

这是一个非常简单的安全方法,但足以满足我的计划。

现在,我有下面的代码来读取二进制文件中的PNG文件,当它试图从IMG_LoadPNG_RW创建一个新的表面时,总是输出一个错误消息,说“读取PNG文件时出错”。

tString sResult{}; cFile_Manager::tRead_File oRead(sDir, std::ios::binary); if(oRead.is_open()) { tString sLine{}; while(getline(oRead, sLine)) sResult += sLine + "\n"; oRead.close(); }else { throw cLog("\n\n[ERROR] Wrong dir passed.\n\nDIR: %s\n\n", sDir); } SDL_RWops* aRW{}; aRW = SDL_RWFromConstMem(&sResult, sizeof(sResult)); if(!aRW) // Error message SDL_Surface* aSurface{}; aSurface = IMG_LoadPNG_RW(aRW); if(!aSurface) // This is where SDL shows "Error reading the PNG file." 

编辑:Omg我犯了一些错误,现在这是正确的代码。 现在它给出了一个不同的错误:“通过ASCII转换损坏的PNG文件”

  char* sBuffer{}; if(oRead.is_open()) { oRead >> std::noskipws; oRead.seekg(0, oRead.end); int iLength = oRead.tellg(); sBuffer = new char[iLength]; oRead.seekg(0, oRead.beg); oRead.read(sBuffer, iLength); oRead.close(); }else { throw cLog("\n\n[ERROR] Wrong dir passed.\n\nDIR: %s\n\n", sDir); } SDL_RWops* aRW{}; aRW = SDL_RWFromConstMem(sBuffer, sizeof(sBuffer)); 

我find了一个解决scheme,这是我在Gamedev和StackOverFlow中收集的各种信息的结果。

为了增加解决scheme的范围,我将通过从我得到它的链接︰https: //stackoverflow.com/questions/4317318/how-do-i-pass-an-stdstring-toa-a-function是-预计炭

这是这个环节的第一个答案