+ -
当前位置:首页 → 问答吧 → 发布带图片的程序

发布带图片的程序

时间:2011-11-29

来源:互联网

偶写了一个程序,里面用到6700多张图片,要怎样将这些图片打包起来。。。

PS:偶是希望像游戏那样,发布的资源中不能直接看到图片的

作者: lin12345   发布时间: 2011-11-29

游戏中的图片一般都是bmp吧,然后压缩成自己的格式,用的时候内存中解析出来,仅供参考。

作者: zhuwanglove   发布时间: 2011-12-02

当资源加到一个dll里

作者: gykgod   发布时间: 2011-12-02

当做资源做成DLL,加载DLL获取资料显示。

作者: dahuaixiaohuai   发布时间: 2011-12-02

引用 3 楼 dahuaixiaohuai 的回复:

当做资源做成DLL,加载DLL获取资料显示。


对,可以灵活的卸载。

作者: only_lonely   发布时间: 2011-12-02

游戏中的资源一般都是打成一个资源包
最简单的资源包结构就是把所有文件内容读出来放到一个文件中,然后在文件头部加上索引,描述清楚每一个文件的偏移和大小

如下面的示例代码

C/C++ code

#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;
}

作者: iblold   发布时间: 2011-12-02

热门下载

更多