image.c: accept type 1 (paletted) TGA files.

(from QSS - in case we need some day.)
This commit is contained in:
Ozkan Sezer 2022-05-24 20:55:04 +03:00
parent 03b7ef9f05
commit 5ea6cdf51d

View file

@ -212,11 +212,19 @@ byte *Image_LoadTGA (FILE *fin, int *width, int *height)
targa_header.pixel_size = fgetc(fin);
targa_header.attributes = fgetc(fin);
if (targa_header.image_type!=2 && targa_header.image_type!=10)
Sys_Error ("Image_LoadTGA: %s is not a type 2 or type 10 targa", loadfilename);
if (targa_header.image_type==1)
{
if (targa_header.pixel_size != 8 || targa_header.colormap_size != 24 || targa_header.colormap_length > 256)
Sys_Error ("Image_LoadTGA: %s has an %ibit palette", loadfilename, targa_header.colormap_type);
}
else
{
if (targa_header.image_type!=2 && targa_header.image_type!=10)
Sys_Error ("Image_LoadTGA: %s is not a type 2 or type 10 targa (%i)", loadfilename, targa_header.image_type);
if (targa_header.colormap_type !=0 || (targa_header.pixel_size!=32 && targa_header.pixel_size!=24))
Sys_Error ("Image_LoadTGA: %s is not a 24bit or 32bit targa", loadfilename);
if (targa_header.colormap_type !=0 || (targa_header.pixel_size!=32 && targa_header.pixel_size!=24))
Sys_Error ("Image_LoadTGA: %s is not a 24bit or 32bit targa", loadfilename);
}
columns = targa_header.width;
rows = targa_header.height;
@ -230,7 +238,36 @@ byte *Image_LoadTGA (FILE *fin, int *width, int *height)
buf = Buf_Alloc(fin);
if (targa_header.image_type==2) // Uncompressed, RGB images
if (targa_header.image_type==1) // Uncompressed, paletted images
{
byte palette[256*4];
int i;
//palette data comes first
for (i = 0; i < targa_header.colormap_length; i++)
{ //this palette data is bgr.
palette[i*3+2] = Buf_GetC(buf);
palette[i*3+1] = Buf_GetC(buf);
palette[i*3+0] = Buf_GetC(buf);
palette[i*3+3] = 255;
}
for (i = targa_header.colormap_length*4; i < sizeof(palette); i++)
palette[i] = 0;
for(row=rows-1; row>=0; row--)
{
realrow = upside_down ? row : rows - 1 - row;
pixbuf = targa_rgba + realrow*columns*4;
for(column=0; column<columns; column++)
{
i = Buf_GetC(buf);
*pixbuf++= palette[i*3+0];
*pixbuf++= palette[i*3+1];
*pixbuf++= palette[i*3+2];
*pixbuf++= palette[i*3+3];
}
}
}
else if (targa_header.image_type==2) // Uncompressed, RGB images
{
for(row=rows-1; row>=0; row--)
{