发布带图片的程序

lin12345 2011-11-29 11:57:00
偶写了一个程序,里面用到6700多张图片,要怎样将这些图片打包起来。。。

PS:偶是希望像游戏那样,发布的资源中不能直接看到图片的
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2011-12-02
  • 打赏
  • 举报
回复
楼上的方式才是正确的。不然6700张照片加载到内存中。亏大了。
iblold 2011-12-02
  • 打赏
  • 举报
回复
游戏中的资源一般都是打成一个资源包
最简单的资源包结构就是把所有文件内容读出来放到一个文件中,然后在文件头部加上索引,描述清楚每一个文件的偏移和大小

如下面的示例代码


#include <string>
#include <vector>
#include <io.h>

struct FileIndex
{
DWORD dwOffset;
DWORD dwSize;
char szName[256];
};

BOOL MakePack(std::vector<std::string> arFileList, const std::string& strDestFile)
{

FILE* fp = fopen(strDestFile.c_str(), "wb");
if (!fp)
return FALSE;

DWORD dwSize = arFileList.size();
fwrite(&dwSize, 1, 4, fp);

FileIndex* pFileList = new FileIndex[arFileList.size()];

fwrite(pFileList, 1, arFileList.size() * sizeof(FileIndex), fp);

for (int i = 0; i < arFileList.size(); ++i)
{
strcpy(pFileList[i].szName, arFileList[i].c_str());
FILE* fbuf = fopen(arFileList[i].c_str(), "rb");
if (!fbuf)
{
fclose(fp);
delete pFileList;
return FALSE;
}
DWORD fsize = filelength(fileno(fbuf));

pFileList[i].dwSize = fsize;
pFileList[i].dwOffset = ftell(fp);

char* buf = new char[fsize];
fread(buf, 1, fsize, fbuf);
fclose(fbuf);

fwrite(buf, 1, fsize, fp);
delete buf;
}

fseek(fp, 4, SEEK_SET);
fwrite(pFileList, 1, arFileList.size() * sizeof(FileIndex), fp);

fclose(fp);
delete pFileList;

return TRUE;
}

FileIndex* OpenPack(const std::string& strPackFile)
{
FILE* fp =fopen(strPackFile.c_str(), "rb");
if (fp)
{
DWORD dwSize = 0;
fread(&dwSize, 1, 4, fp);

FileIndex* pFileIndex = new FileIndex[dwSize];
fread(pFileIndex, 1, dwSize * sizeof(FileIndex), fp);

fclose(fp);

return pFileIndex;
}

return NULL;
}

char* GetFile(const std::string& strPackFile, FileIndex* pFileIndex, const std::string& strFile)
{
FILE* fp =fopen(strPackFile.c_str(), "rb");
if (fp)
{
DWORD dwSize = 0;
fread(&dwSize, 1, 4, fp);

for (int i = 0; i < dwSize; ++i)
{
if (strFile == pFileIndex[i].szName)
{
char* buf = new char[pFileIndex[i].dwSize];
fseek(fp, pFileIndex[i].dwOffset, SEEK_SET);
fread(buf, 1, pFileIndex[i].dwSize, fp);
fclose(fp);
return buf;
}
}

fclose(fp);
}

return NULL;
}
only_lonely 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dahuaixiaohuai 的回复:]

当做资源做成DLL,加载DLL获取资料显示。
[/Quote]

对,可以灵活的卸载。
一叶之舟 2011-12-02
  • 打赏
  • 举报
回复
当做资源做成DLL,加载DLL获取资料显示。
gykgod 2011-12-02
  • 打赏
  • 举报
回复
当资源加到一个dll里
zhuwanglove 2011-12-02
  • 打赏
  • 举报
回复
游戏中的图片一般都是bmp吧,然后压缩成自己的格式,用的时候内存中解析出来,仅供参考。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧