aboutsummaryrefslogtreecommitdiff
path: root/libexe/icons/mktarga.cpp
blob: b7a5dccc903fa1b23fd039c314fc8c882c0cfc86 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Shave and a Haircut
// (c) 2019 Epic Games
// US Patent 6720962

#include <stdio.h>    
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);    }