加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
WilFile.cpp 2.33 KB
一键复制 编辑 原始数据 按行查看 历史
Shaker 提交于 2014-08-13 09:43 . *
#include "StdAfx.h"
#include ".\wilfile.h"
namespace UIExtended
{
struct sWixHead
{
char Title[44];
DWORD IndexCount;
};
struct sWilHead
{
char Title[44];
DWORD ImageCount;
DWORD ColorCount;
DWORD PaletteSize;
};
struct sImageInfo
{
WORD Width;
WORD Height;
BYTE unknow[4];
};
bool LoadBitmapWil(LPCTSTR name, DWORD index, CDC& dc/*, CBitmap& Bitmap*/ )
{
char szWilFileName[MAX_PATH];
char szWixFileName[MAX_PATH];
char szModuleFileName[MAX_PATH];
GetModuleFileName(0,szModuleFileName,MAX_PATH);
long nPos=strlen(szModuleFileName);
while(nPos>0)
{
if(szModuleFileName[nPos]=='\\')
{
szModuleFileName[nPos]=(char)0;
strcat(szModuleFileName,"\\data\\");
break;
}
nPos--;
}
strcpy(szWilFileName,szModuleFileName);
strcat(szWilFileName,name);
strcat(szWilFileName,".wil");
strcpy(szWixFileName,szModuleFileName);
strcat(szWixFileName,name);
strcat(szWixFileName,".wix");
sWixHead WixHead;
sWilHead WilHead;
BYTE* lpPal=NULL;
DWORD* lpOffs=NULL;
sImageInfo Image;
BYTE* pImage=NULL;
BYTE* pb=NULL;
FILE*fp;
fp=fopen(szWixFileName,"rb");
if(fp!=NULL)
{
fread(&WixHead,sizeof(WixHead),1,fp);
if ( !(index<WixHead.IndexCount) )
{
fclose(fp);
return false;
}
std::auto_ptr<DWORD> lpOffs_auto(new DWORD[WixHead.IndexCount]);
lpOffs=lpOffs_auto.get();
ZeroMemory(lpOffs,sizeof(DWORD)*WixHead.IndexCount);
fread(lpOffs,sizeof(DWORD),WixHead.IndexCount,fp);
fclose(fp);
fp=fopen(szWilFileName,"rb");
if(fp!=NULL)
{
fread(&WilHead,sizeof(WilHead),1,fp);
std::auto_ptr<BYTE> lpPal_auto(new BYTE[WilHead.ColorCount*4]);
lpPal=lpPal_auto.get();
ZeroMemory(lpPal,sizeof(DWORD)*WilHead.ColorCount);
fread(lpPal,WilHead.PaletteSize,1,fp);
fseek(fp,lpOffs[index],SEEK_SET);
fread(&Image,sizeof(Image),1,fp);
std::auto_ptr<BYTE> pImage_auto(new BYTE[Image.Height*Image.Width]);
pImage=pImage_auto.get();
ZeroMemory(pImage,Image.Height*Image.Width);
fseek(fp,lpOffs[index]+8,SEEK_SET);
fread(pImage,Image.Height*Image.Width,1,fp);
fclose(fp);
for(WORD i=0;i<Image.Width;i++)
{
for(WORD j=0;j<Image.Height;j++)
{
pb=&lpPal[pImage[j*Image.Width+i]*4];
dc.SetPixel(i,Image.Height-j-1,RGB(pb[2],pb[1],pb[0]));
}
}
return true;
}
}
return false;
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化