// Shave and a Haircut // (c) 2019 Epic Games // US Patent 6720962 #include void main(int argc,char *argv[]) { unsigned char header[18]; int width,height,widthSample,heightSample; int topDown,cmlen,cmsize; int x,y; int r,g,b; int sampleX,sampleY; FILE *tgaFile,*outFile; tgaFile = NULL; outFile = NULL; if(argc == 1) { printf("Missing Targa file name.\n"); } if((tgaFile = fopen(argv[1],"rb")) == NULL) { printf("Cannot open image file '%s'.\n",argv[1]); // exit(1); } if((outFile = fopen("image.h","w")) == NULL) { fclose(tgaFile); printf("Cannot open output header file 'image.h'.\n"); // exit(1); } fread(header,sizeof(unsigned char),18,tgaFile); if(header[2] < 1 && header[2] > 3) // not straight raster! { printf("Not a raster-based Targa file.\n"); fclose(tgaFile); fclose(outFile); // exit(1); } if(header[16] != 24) // not 24bpp! { printf("Expecting color depth of 24 bits in Targa file; found %d.\n",(int)header[16]); fclose(tgaFile); fclose(outFile); //exit(1); } width = header[13] * 256 + header[12]; widthSample = 1; height = header[15] * 256 + header[14]; heightSample = 1; fprintf(outFile,"#define IMAGEWIDTH %d\n",width); fprintf(outFile,"#define IMAGEHEIGHT %d\n\n",height); topDown = 0; // bottom-up raster if((header[17] & 0x20)) // top-down raster topDown = 1; if(header[0] > 0) fseek(tgaFile,header[0],SEEK_CUR); // skip over picture ID info cmlen = header[6] * 256 + header[5]; if(cmlen > 0) { int cmsize = header[7] / 8; fseek(tgaFile,cmlen * cmsize,SEEK_CUR); // ignore color map } sampleX = 0; // (topDown ? 0 : thumbHeight); sampleY = 0; fprintf(outFile,"unsigned char image_data[] = {\n"); for(x = 0;x < height;x++) { for(y = 0;y < width;y++) { b = getc(tgaFile); g = getc(tgaFile); r = getc(tgaFile); fprintf(outFile,"%d,%d,%d,\n",r,g,b); } } fprintf(outFile,"};\n"); fclose(tgaFile); }