⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 mpq文件查看器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		 *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 + -