Code: Select all
int convertWarframe(char* pngFileWF)
{
FILE* fIn = NULL;
FILE* fOut = NULL;
char* pixels0;
char* pixels1;
char* pixOut;
fIn = fopen( pngFileWF, "rb" );
strcat( pngFileWF, "_reversed.png" );
fOut = fopen( pngFileWF, "wb+" );
fseek( fIn, 0, SEEK_END );
int fSz = ftell( fIn );
fseek( fIn, 0, SEEK_SET );
pixels0 = (char*)malloc( WFBLOCKSZ );
pixels1 = (char*)malloc( WFBLOCKSZ );
pixOut = (char*)malloc( fSz );
for( int i = 0; i < fSz / (2 * WFBLOCKSZ); i++ )
{
fread( pixels0, WFBLOCKSZ, 1, fIn );
fread( pixels1, WFBLOCKSZ, 1, fIn );
for( int j = 0; j < WFBLOCKSZ / WriteBlockSz; j++ )
{
memcpy( pixOut + 2 * i * WFBLOCKSZ + ( 2 * j + 0) * WriteBlockSz, &pixels0[ j * WriteBlockSz ], WriteBlockSz );
memcpy( pixOut + 2 * i * WFBLOCKSZ + ( 2 * j + 1) * WriteBlockSz, &pixels1[ j * WriteBlockSz ], WriteBlockSz );
}
}
fwrite( pixOut, fSz, 1, fOut );
fclose( fIn );
fclose( fOut );
free(pixels0);
free(pixels1);
free(pixOut);
return 0;
}
Depending on the size of the output I think I manually added an appropriate DDS header.