千千静听里的皮肤文件实际就是一个rar,里面很多bmp图片
我想知道他是怎么读取这个压缩包并从里面将图片提取出来并显示的呢?
需要用rar接口?zlib?木有发现这个迹象的啊?
我一般都是从文件夹用CImage加载图片绘制界面的,为了实现动态换肤,现在要将这些
图片全部弄成一个压缩包,不知道用什么方法读取好,求一个好的方案。

解决方案 »

  1.   

    用zlib压缩就可以实现啊。。压缩比不行?
      

  2.   

    压缩后怎么将里面的文件读取出来给CImage类使用?
      

  3.   

    应该是zip格式的..libzip zlib应该都可以吧,   可以考虑将文件解压到某个目录比如%USERPROFILE%下面的某个目录,然后载入里面的文件
      

  4.   

    应该在你安装的时候 解压到一个临时文件,然后通过程序生成一个资源文件,这样程序每次加载的时候加载资源文件就可以了。要么就是加压到内存中,直接用。
    不过你也没有必要搞成一个压缩包,你可以做成一个资源dll更方便
      

  5.   

    找到了一个zip.cpp和unzip.cpp,一会试试
      

  6.   

    找到方法了,用UnZip库就可以了: CPaintDC dc(this);
    HZIP hzip = OpenZip(_T("orange.skn"),0);
    if (hzip)
    {
    ZIPENTRY ze;
    int i; 
    FindZipItem(hzip,_T("equalizer_skin.bmp"),true,&i,&ze);
    HGLOBAL hGlobal  =  GlobalAlloc(GMEM_MOVEABLE, ze.unc_size);
    void *  pData  =  GlobalLock(hGlobal);
    UnzipItem(hzip,i, pData, ze.unc_size);
    GlobalUnlock(hGlobal); IStream *pStream  =  NULL;
    if  (CreateStreamOnHGlobal(hGlobal, TRUE,  & pStream)  ==  S_OK)
    {
    CImage image;
    if (SUCCEEDED(image.Load(pStream)))
    {
    image.TransparentBlt(dc,10,10,image.GetWidth(),image.GetHeight(),RGB(255,0,255)); }
        pStream->Release();
    }
    GlobalFree(hGlobal);
    CloseZip(hzip);
    }
      

  7.   


    楼主也可以考虑下用资源dll实现
      

  8.   

    呵呵 我还是喜欢用文件压缩包的方式,解压到内存然后显示,就采用这种方法了,加个xml配置下皮肤文件