/* ** Haaf's Game Engine 1.81 ** Copyright (C) 2003-2008, Relish Games ** hge.relishgames.com ** ** PNG Images Optimizer */ #include "pngopt.h" #include #include HGE *hge = 0; struct color { unsigned char r; unsigned char g; unsigned char b; unsigned char a; }; struct filelist { char filename[256]; filelist* next; }; filelist *files=0; bool convert(char *filename); int main(int argc, char* argv[]) { HANDLE hSearch; WIN32_FIND_DATA SearchData; int nfiles=0; bool done=false; char *buf, filename[512]; filelist *newFile, *nextFile; printf("\nBlaPic\nby TGGC\n\n"); if(argc!=2) { printf("Usage: Bla.EXE \n\n"); printf("makes datablocks...\n"); return 0; } else { hSearch=FindFirstFile(argv[1], &SearchData); nextFile=0; for(;;) { if(hSearch==INVALID_HANDLE_VALUE || done) { FindClose(hSearch); break; } if(!(SearchData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { strcpy_s(filename, argv[1]); buf=strrchr(filename, '\\'); if(!buf) buf=filename; else buf++; strcpy_s(buf,256, SearchData.cFileName); newFile=new filelist; strcpy_s(newFile->filename,filename); newFile->next=0; if(nextFile) nextFile->next=newFile; else files=newFile; nextFile=newFile; } done=!FindNextFile(hSearch, &SearchData); } hge=hgeCreate(HGE_VERSION); hge->System_SetState(HGE_USESOUND, false); hge->System_SetState(HGE_WINDOWED, true); hge->System_SetState(HGE_SCREENWIDTH, 320); hge->System_SetState(HGE_SCREENHEIGHT, 200); hge->System_SetState(HGE_SHOWSPLASH, false); if(!hge->System_Initiate()) { hge->Release(); printf("\nCan't initiate HGE.\n\n",nfiles); return 0; } newFile=files; while(newFile) { if(convert(newFile->filename)) nfiles++; nextFile=newFile->next; delete newFile; newFile=nextFile; } hge->System_Shutdown(); hge->Release(); printf("\n%d image(s) successfully optimized.\n\n",nfiles); return 0; } } bool convert(char *filename) { HTEXTURE tex; int width, height, pitch; color *buf; printf("%s - ", filename); tex = hge->Texture_Load(filename); if(!tex) { printf("Can't load texture.\n"); return false; } width = hge->Texture_GetWidth(tex, true); height = hge->Texture_GetHeight(tex, true); pitch = hge->Texture_GetWidth(tex, false); buf=(color *)hge->Texture_Lock(tex, false); if(!buf) { printf("Can't lock texture.\n"); return false; } std::vector< bool > vecData; for( int i=0; i vecPixelY; std::vector< int > vecPixelX; vecPixelY.resize( height ); vecPixelX.resize( width ); for( int i=0; i 255 || iOutHeight > 255 ) { printf("too large.\n"); return false; } std::ofstream ofs( strFile.c_str() ); ofs << "const unsigned char g_" << str.c_str() << "[]=\n"; ofs << "{\n"; ofs << "\t" << iOutWidth << "," << iOutHeight << ",\n"; int iBitted= 0; int iCount= 0; for( int i= iStartY; i <= iLastY; i++) { for( int j= iStartX; j<= iLastX; j++) { iBitted+= vecData[ i*width+j ] ? 1 : 0; if( iCount % 8 == 7 || iCount + 1 == iOutWidth * iOutHeight ) { while( iCount % 8 < 7 ) { iBitted*= 2; iCount++; } ofs << "\t" << iBitted << ",\n"; iBitted= 0; } iBitted*= 2; iCount++; } } ofs << "};\n"; hge->Texture_Unlock(tex); printf("Ok\n"); return true; }