📄 wilfile.cpp.svn-base
字号:
#include "StdAfx.h"
#include "wilfile.h"
#include <stdio.h>
#include ".\wilfile.h"
CWilFile::CWilFile(LPCTSTR lpFileName)
{
m_lpPal=NULL;
m_lpOffs=NULL;
m_lpBitMaps=NULL;
char szModuleFileName[0x1000];
GetModuleFileName(0,szModuleFileName,0x1000);
long nPos=strlen(szModuleFileName);
while(nPos>0)
{
if(szModuleFileName[nPos]=='\\')
{
szModuleFileName[nPos]=(char)0;
strcat(szModuleFileName,"\\data\\");
break;
}
nPos--;
}
strcpy(m_szWilFileName,szModuleFileName);
strcat(m_szWilFileName,lpFileName);
strcat(m_szWilFileName,".wil");
strcpy(m_szWixFileName,szModuleFileName);
strcat(m_szWixFileName,lpFileName);
strcat(m_szWixFileName,".wix");
FILE*fp;
fp=fopen(m_szWixFileName,"rb");
if(fp!=NULL)
{
fread(&m_WixHead,sizeof(m_WixHead),1,fp);
if(m_lpOffs!=NULL)
{
delete[]m_lpOffs;
}
m_lpOffs=new DWORD[m_WixHead.IndexCount];
ZeroMemory(m_lpOffs,sizeof(DWORD)*m_WixHead.IndexCount);
fread(m_lpOffs,sizeof(DWORD),m_WixHead.IndexCount,fp);
fclose(fp);
fp=fopen(m_szWilFileName,"rb");
if(fp!=NULL)
{
if(m_lpBitMaps)
{
delete[]m_lpBitMaps;
}
m_lpBitMaps=new LP_BITMAPX[m_WixHead.IndexCount];
for(DWORD i=0;i<m_WixHead.IndexCount;i++)
{
m_lpBitMaps[i]=NULL;
}
fread(&m_WilHead,sizeof(m_WilHead),1,fp);
if(m_lpPal!=NULL)
{
delete[]m_lpPal;
}
m_lpPal=new DWORD[m_WilHead.ColorCount];
ZeroMemory(m_lpPal,sizeof(DWORD)*m_WilHead.ColorCount);
fread(m_lpPal,m_WilHead.PaletteSize,1,fp);
fclose(fp);
return;
}
}
MessageBox(0,m_szWilFileName,"读取失败",0);
}
CWilFile::~CWilFile(void)
{
//释放内存缓冲
if(m_lpOffs!=NULL)
delete[]m_lpOffs;
if(m_lpPal!=NULL)
delete[]m_lpPal;
}
LP_BITMAPX CWilFile::LoadBitmap(LP_DISPLAY lpDisplay,DWORD nIndex)
{
if(nIndex>m_WixHead.IndexCount)
{
return NULL;
}
if(m_lpBitMaps[nIndex]!=NULL)
{
return m_lpBitMaps[nIndex];
}
else
{
LP_BITMAPX Bitmap=NULL;
FILE* fp=NULL;
BYTE* pImage=NULL;
BYTE* pb=NULL;
__try
{
fp=fopen(m_szWilFileName,"rb");
if(fp==NULL)
{
return Bitmap;
}
ImageInfo Image;
fseek(fp,m_lpOffs[nIndex],SEEK_SET);
fread(&Image,sizeof(Image),1,fp);
pImage=new BYTE[Image.Height*Image.Width];
ZeroMemory(pImage,Image.Height*Image.Width);
fseek(fp,m_lpOffs[nIndex]+8,SEEK_SET);
fread(pImage,Image.Height*Image.Width,1,fp);
fclose(fp);
Bitmap=lpDisplay->CreateBitmap(Image.Width,Image.Height,true);
if(Bitmap==NULL)
{
return Bitmap;
}
for(WORD i=0;i<Image.Width;i++)
{
for(WORD j=0;j<Image.Height;j++)
{
//if(pImage[j*Image.Width+i])
{
pb=(BYTE*)(m_lpPal+pImage[j*Image.Width+i]);
lpDisplay->DrawPixel(Bitmap,i,Image.Height-j-1,RGB2Hi(pb[2],pb[1],pb[0]));
}
}
}
pb=(BYTE*)(m_lpPal);
Bitmap->SetColorKey(RGB2Hi(pb[2],pb[1],pb[0]));
}
__finally
{
if(pImage!=NULL)
delete[]pImage;
}
m_lpBitMaps[nIndex]=Bitmap;
return Bitmap;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -