📄 main.cpp
字号:
*lps = (char*)malloc_func(lstrlen(lpSrch)+1);
lstrcpy(lpf, lpFirst);
lstrcpy(lps, lpSrch);
CharUpperBuff(lpf, lstrlen(lpFirst));
CharUpperBuff(lps, lstrlen(lpSrch));
char *t = strstr(lpf, lps);
if(t==NULL)
{
free_func(lpf);
free_func(lps);
return NULL;
}
else
{
char *r = (char*)(lpFirst+(t-lpf));
free_func(lpf);
free_func(lps);
return r;
}
}
void LoadrIDTable(char *szfile)
{
FILE *fsrc;
char tmp[1024];
char st[MAX_PATH+3];
memcpy(rIDTable, default_rIDTable, sizeof(rIDTable));
fsrc = fopen(szfile, "rt");
if(fsrc==NULL)
{
memcpy(rIDTable, default_rIDTable, sizeof(rIDTable));
return;
}
DWORD k;
while(!feof(fsrc))
{
fscanf(fsrc, "%s", &tmp);
if(tmp[0]!=';')
{
sscanf(tmp, "%u=%s", &k, &st);
lstrcpy(rIDTable[k], st);
}
}
lstrcpy(rIDTable[1], "");
fclose(fsrc);
}
void BatchSavePicture(char *filedest, BOOL boverw, char *srcbuf, long iwidth, long iheight, long ibpp)
{
if((utilFileExists(filedest) == TRUE) && (boverw == FALSE) )
return;
toregistre("Saving %s", filedest);
DeleteFile(filedest);
HANDLE hFile = CreateFile(filedest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return;
DWORD r, nn;
char *filebuf;
if(ISBLP(filedest))
{
/*
nn = iwidth*iheight*ibpp/8;
if(ibpp == 32)
RGBA2BGRA(srcbuf, nn);
else
if(ibpp == 24)
RGB2BGR(srcbuf, nn);
*/
nn = BuildBLP(srcbuf, iwidth, iheight, ibpp, NULL, glastqual);
filebuf = (char*)malloc_func(nn);
BuildBLP(srcbuf, iwidth, iheight, ibpp, filebuf, glastqual);
WriteFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
free_func(filebuf);
return;
}
if(ISBMP(filedest))
{
/*
nn = iwidth*iheight*ibpp/8;
if(ibpp == 32)
RGBA2BGRA(srcbuf, nn);
else
if(ibpp == 24)
RGB2BGR(srcbuf, nn);
*/
HorizFlip(srcbuf, iwidth*ibpp/8, iheight);
nn = MakeBMP(srcbuf, iwidth, iheight, ibpp, NULL);
filebuf = (char*)malloc_func(nn);
MakeBMP(srcbuf, iwidth, iheight, ibpp, filebuf);
WriteFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
free_func(filebuf);
return;
}
if(ISTGA(filedest))
{
/*
nn = iwidth*iheight*ibpp/8;
if(ibpp == 32)
RGBA2BGRA(srcbuf, nn);
else
if(ibpp == 24)
RGB2BGR(srcbuf, nn);
*/
HorizFlip(srcbuf, iwidth*ibpp/8, iheight);
nn = MakeTGA((unsigned char*)srcbuf, iwidth, iheight, ibpp, NULL);
filebuf = (char*)malloc_func(nn);
MakeTGA((unsigned char*)srcbuf, iwidth, iheight, ibpp, (unsigned char*)filebuf);
WriteFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
free_func(filebuf);
return;
}
if(ISJPG(filedest))
{
nn = iwidth*iheight*ibpp/8;
if(ibpp == 32)
RGBA2BGRA(srcbuf, nn);
else
if(ibpp == 24)
RGB2BGR(srcbuf, nn);
nn = IJGWrite((unsigned char*)srcbuf, iwidth*iheight*ibpp/8, NULL, 0, glastqual, iwidth, iheight, ibpp/8);
filebuf = (char*)malloc_func(nn);
IJGWrite((unsigned char*)srcbuf, iwidth*iheight*ibpp/8, (unsigned char*)filebuf, nn, glastqual, iwidth, iheight, ibpp/8);
WriteFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
free_func(filebuf);
return;
}
CloseHandle(hFile);
return;
}
void BatchConversion(char *srcdir, char *destdir, char *trelpath, long isrcfmt, long idestfmt, BOOL boverw, BOOL brec)
{
// 0 "*.BMP (Bitmaps)"
// 1 "*.TGA (Targa)"
// 2 "*.JPG (JPEG)"
// 3 "*.BLP (Warcraft 3 Texture)"
// 4 "*.BMP; *.TGA; *.JPG"
// 5 "*.BMP; *.TGA; *.JPG; *.BLP"
toregistre("Current relative path : %s", trelpath);
DWORD r, nn;
char *filebuf, *rawbuf;
HANDLE hFile;
long iwidth, iheight, ibpp;
char *relpath = (char*)malloc_func(512);
if(trelpath != NULL)
lstrcpy(relpath, trelpath);
else
memset(relpath, 0, 512);
utilAddBkSlash(relpath, relpath, 512);
WIN32_FIND_DATA w;
char tmp[1024], stmp[1024], dtmp[1024], s[1024], d[1024];
BOOL b = TRUE;
if(lstrcmpi(relpath, "\\") == 0)
{
sprintf(tmp, "%s\\*.*", srcdir);
sprintf(stmp, "%s\\", srcdir);
sprintf(dtmp, "%s\\", destdir);
}
else
{
sprintf(tmp, "%s%s*.*", srcdir, relpath);
sprintf(stmp, "%s%s", srcdir, relpath);
sprintf(dtmp, "%s%s", destdir, relpath);
}
char sdext[10];
switch(idestfmt)
{
case 0:
lstrcpy(sdext, "BMP");
break;
case 1:
lstrcpy(sdext, "TGA");
break;
case 2:
lstrcpy(sdext, "JPG");
break;
case 3:
lstrcpy(sdext, "BLP");
break;
default:
lstrcpy(sdext, "BLP");
break;
}
HANDLE hf = FindFirstFile(tmp, &w);
while((hf != INVALID_HANDLE_VALUE)&&(b==TRUE))
{
if(lstrcmpi(w.cFileName, ".")==0 || lstrcmpi(w.cFileName, "..")==0)
{
b = FindNextFile(hf, &w);
continue;
}
if( (w.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (brec == TRUE) )
{
char crelpath[512];
lstrcpy(crelpath, relpath);
lstrcat(crelpath, w.cFileName);
utilAddBkSlash(crelpath, crelpath, 512);
toregistre("Entering subdirectory %s", w.cFileName);
BatchConversion(srcdir, destdir, crelpath, isrcfmt, idestfmt, boverw, brec);
b = FindNextFile(hf, &w);
continue;
}
sprintf(s, "%s%s", stmp, w.cFileName);
sprintf(d, "%s%s", dtmp, w.cFileName);
utilChangeFileExt(d, sdext, 1024);
if(ISBMP(w.cFileName) && ( (isrcfmt == 0) || (isrcfmt == 4) || (isrcfmt == 5) ) )
{
toregistre("Found %s", s);
hFile = CreateFile(s, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
b = FindNextFile(hf, &w);
continue;
}
nn = GetFileSize(hFile, NULL);
filebuf = (char*)malloc_func(nn);
ReadFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
nn = LoadBMP(filebuf, &iwidth, &iheight, &ibpp, NULL);
rawbuf = (char*)malloc_func(nn);
LoadBMP(filebuf, &iwidth, &iheight, &ibpp, rawbuf);
free_func(filebuf);
/*
if(ibpp == 32)
RGBA2BGRA(rawbuf, nn);
else
if(ibpp == 24)
RGB2BGR(rawbuf, nn);
*/
HorizFlip(rawbuf, iwidth*ibpp/8, iheight);
utilCreateAllSubDirs(dtmp);
BatchSavePicture(d, boverw, rawbuf, iwidth, iheight, ibpp);
free_func(rawbuf);
b = FindNextFile(hf, &w);
continue;
}
if(ISTGA(w.cFileName) && ( (isrcfmt == 1) || (isrcfmt == 4) || (isrcfmt == 5) ) )
{
toregistre("Found %s", s);
hFile = CreateFile(s, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
b = FindNextFile(hf, &w);
continue;
}
nn = GetFileSize(hFile, NULL);
filebuf = (char*)malloc_func(nn);
ReadFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
nn = LoadTGA(filebuf, &iwidth, &iheight, &ibpp, NULL, NULL);
rawbuf = (char*)malloc_func(nn);
LoadTGA(filebuf, &iwidth, &iheight, &ibpp, rawbuf, NULL);
free_func(filebuf);
/*
if(ibpp == 32)
RGBA2BGRA(rawbuf, nn);
else
if(ibpp == 24)
RGB2BGR(rawbuf, nn);
*/
HorizFlip(rawbuf, iwidth*ibpp/8, iheight);
utilCreateAllSubDirs(dtmp);
BatchSavePicture(d, boverw, rawbuf, iwidth, iheight, ibpp);
free_func(rawbuf);
b = FindNextFile(hf, &w);
continue;
}
if(ISJPG(w.cFileName) && ( (isrcfmt == 2) || (isrcfmt == 4) || (isrcfmt == 5) ) )
{
toregistre("Found %s", s);
hFile = CreateFile(s, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
b = FindNextFile(hf, &w);
continue;
}
nn = GetFileSize(hFile, NULL);
filebuf = (char*)malloc_func(nn);
ReadFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
nn = IJGRead((unsigned char*)filebuf, nn, &iwidth, &iheight, &ibpp, NULL);
rawbuf = (char*)malloc_func(nn);
IJGRead((unsigned char*)filebuf, nn, &iwidth, &iheight, &ibpp, (unsigned char*)rawbuf);
free_func(filebuf);
if(ibpp == 32)
RGBA2BGRA(rawbuf, nn);
else
if(ibpp == 24)
RGB2BGR(rawbuf, nn);
utilCreateAllSubDirs(dtmp);
BatchSavePicture(d, boverw, rawbuf, iwidth, iheight, ibpp);
free_func(rawbuf);
b = FindNextFile(hf, &w);
continue;
}
if(ISBLP(w.cFileName) && ( (isrcfmt == 3) || (isrcfmt == 5) ) )
{
toregistre("Found %s", s);
hFile = CreateFile(s, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
b = FindNextFile(hf, &w);
continue;
}
nn = GetFileSize(hFile, NULL);
filebuf = (char*)malloc_func(nn);
ReadFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
nn = ConvertBLP(filebuf, NULL, (ULONG*)&iwidth, (ULONG*)&iheight, NULL, NULL);
rawbuf = (char*)malloc_func(nn);
ConvertBLP(filebuf, rawbuf, (ULONG*)&iwidth, (ULONG*)&iheight, NULL, NULL);
free_func(filebuf);
if(ibpp == 32)
RGBA2BGRA(rawbuf, nn);
else
if(ibpp == 24)
RGB2BGR(rawbuf, nn);
utilCreateAllSubDirs(dtmp);
BatchSavePicture(d, boverw, rawbuf, iwidth, iheight, 32);
free_func(rawbuf);
b = FindNextFile(hf, &w);
continue;
}
b = FindNextFile(hf, &w);
}
free_func(relpath);
return;
}
void SaveSeqPic(char *picdat, int iframe)
{
HANDLE hFile;
DWORD r;
char stmp[1024];
switch(LOWORD(gseqsavefmt))
{
case 0:
sprintf(stmp, "%s%s%04u.bmp", gseqsavedir, gseqsavename, iframe);
break;
case 1:
sprintf(stmp, "%s%s%04u.tga", gseqsavedir, gseqsavename, iframe);
break;
case 2:
sprintf(stmp, "%s%s%04u.jpg", gseqsavedir, gseqsavename, iframe);
break;
}
DeleteFile(stmp);
hFile = CreateFile(stmp, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return;
if(LOWORD(gseqsavefmt) == 0) // BMP
{
DWORD bmpsize = MakeBMP((char*)picdat, birgb.biWidth, birgb.biHeight, 24, NULL);
char *bmpbuf = (char*)malloc_func(bmpsize);
MakeBMP((char*)picdat, birgb.biWidth, birgb.biHeight, 24, bmpbuf);
WriteFile(hFile, bmpbuf, bmpsize, &r, NULL);
CloseHandle(hFile);
free_func(bmpbuf);
}
if(LOWORD(gseqsavefmt) == 1) // TGA
{
DWORD tgasize = MakeTGA((unsigned char*)picdat, birgb.biWidth, birgb.biHeight, 24, NULL);
char *tgabuf = (char*)malloc_func(tgasize);
MakeTGA((unsigned char*)picdat, birgb.biWidth, birgb.biHeight, 24, (unsigned char*)tgabuf);
WriteFile(hFile, tgabuf, tgasize, &r, NULL);
CloseHandle(hFile);
free_func(tgabuf);
}
if(LOWORD(gseqsavefmt) == 2) // JPG
{
RGB2BGR(picdat, birgb.biSizeImage);
HorizFlip(picdat, birgb.biWidth*birgb.biBitCount/8, birgb.biHeight);
int q = HIWORD(gseqsavefmt);
DWORD jpgsize = IJGWrite((unsigned char*)picdat, birgb.biSizeImage, NULL, 0, q, birgb.biWidth, birgb.biHeight, 3);
char *jpgbuf = (char*)malloc_func(jpgsize);
IJGWrite((unsigned char*)picdat, birgb.biSizeImage, (unsigned char*)jpgbuf, jpgsize, q, birgb.biWidth, birgb.biHeight, 3);
WriteFile(hFile, jpgbuf, jpgsize, &r, NULL);
CloseHandle(hFile);
free_func(jpgbuf);
}
}
void LoadBGPicture()
{
OPENFILENAME ofn;
HANDLE hFile;
char *filebuf, *rawbuf;
char *tmpbuf;
DWORD nn,r=0;
long bw, bh, bp;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize= sizeof(OPENFILENAME);
ofn.hwndOwner = dlg;
ofn.lpstrFilter = "Picture File (*.BMP;*.JPG;*.TGA;*.BLP)\0*.BMP;*.JPG;*.TGA;*.BLP\0\0\0";
ofn.lpstrFile=(char*)malloc_func(MAX_PATH);
ZeroMemory(ofn.lpstrFile, MAX_PATH);
ofn.nMaxFile = MAX_PATH;
ofn.lpstrDefExt = "*.BMP;*.JPG;*.TGA;*.BLP\0\0";
ofn.Flags = OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST;
if(GetOpenFileName(&ofn) == FALSE)
{
free_func(ofn.lpstrFile);
bgloaded = FALSE;
return;
}
hFile = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
free_func(ofn.lpstrFile);
bgloaded = FALSE;
return;
}
nn = GetFileSize(hFile, NULL);
filebuf = (char*)malloc_func(nn);
ReadFile(hFile, filebuf, nn, &r, NULL);
CloseHandle(hFile);
if(ISBMP(ofn.lpstrFile))
{
nn = LoadBMP(filebuf, &bw, &bh, &bp, NULL);
rawbuf = (char*)malloc_func(nn);
LoadBMP(filebuf, &bw, &bh, &bp, rawbuf);
HorizFlip(rawbuf, bw*bp/8, bh);
free_func(filebuf);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -