TGA loader - Mostly cosmetic refactoring

This commit is contained in:
Kim Woelders 2019-11-15 17:31:48 +01:00
parent 83243f08fa
commit f01353d155
1 changed files with 67 additions and 68 deletions

View File

@ -196,6 +196,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
DATA32 *dataptr; DATA32 *dataptr;
int y, palcnt = 0, palbpp = 0; int y, palcnt = 0, palbpp = 0;
unsigned char a, r, g, b;
fd = open(im->real_file, O_RDONLY); fd = open(im->real_file, O_RDONLY);
if (fd < 0) if (fd < 0)
@ -347,36 +348,37 @@ load(ImlibImage * im, ImlibProgressFunction progress,
switch (bpp) switch (bpp)
{ {
case 32: /* 32-bit BGRA pixels */ case 32: /* 32-bit BGRA pixels */
*dataptr++ = b = *bufptr++;
PIXEL_ARGB(bufptr[3], bufptr[2], bufptr[1], g = *bufptr++;
bufptr[0]); r = *bufptr++;
bufptr += 4; a = *bufptr++;
*dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 24: /* 24-bit BGR pixels */ case 24: /* 24-bit BGR pixels */
*dataptr++ = b = *bufptr++;
PIXEL_ARGB(0xff, bufptr[2], bufptr[1], bufptr[0]); g = *bufptr++;
bufptr += 3; r = *bufptr++;
a = 0xff;
*dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 8: /* 8-bit grayscale or palette */ case 8: /* 8-bit grayscale or palette */
if (!palette) b = *bufptr++;
a = 0xff;
if (palette)
{ {
*dataptr++ = if (b >= palcnt)
PIXEL_ARGB(0xff, bufptr[0], bufptr[0], goto quit;
bufptr[0]); r = palette[b * palbpp + 2];
g = palette[b * palbpp + 1];
b = palette[b * palbpp + 0];
} }
else else
{ {
if (*bufptr >= palcnt) r = g = b;
goto quit;
*dataptr++ =
PIXEL_ARGB(0xff,
palette[*bufptr * palbpp + 2],
palette[*bufptr * palbpp + 1],
palette[*bufptr * palbpp + 0]);
} }
bufptr += 1; *dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
} }
@ -386,13 +388,13 @@ load(ImlibImage * im, ImlibProgressFunction progress,
else else
{ {
/* decode RLE compressed data */ /* decode RLE compressed data */
unsigned char curbyte, red, green, blue, alpha;
DATA32 *final_pixel = dataptr + im->w * im->h; DATA32 *final_pixel = dataptr + im->w * im->h;
/* loop until we've got all the pixels or run out of input */ /* loop until we've got all the pixels or run out of input */
while ((dataptr < final_pixel)) while ((dataptr < final_pixel))
{ {
int i, count; int i, count;
unsigned char curbyte;
if ((bufptr + 1 + (bpp / 8)) > bufend) if ((bufptr + 1 + (bpp / 8)) > bufend)
goto quit; goto quit;
@ -405,43 +407,40 @@ load(ImlibImage * im, ImlibProgressFunction progress,
switch (bpp) switch (bpp)
{ {
case 32: case 32:
blue = *bufptr++; b = *bufptr++;
green = *bufptr++; g = *bufptr++;
red = *bufptr++; r = *bufptr++;
alpha = *bufptr++; a = *bufptr++;
for (i = 0; (i < count) && (dataptr < final_pixel); i++) for (i = 0; (i < count) && (dataptr < final_pixel); i++)
*dataptr++ = PIXEL_ARGB(alpha, red, green, blue); *dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 24: case 24:
blue = *bufptr++; b = *bufptr++;
green = *bufptr++; g = *bufptr++;
red = *bufptr++; r = *bufptr++;
alpha = 0xff; a = 0xff;
for (i = 0; (i < count) && (dataptr < final_pixel); i++) for (i = 0; (i < count) && (dataptr < final_pixel); i++)
*dataptr++ = PIXEL_ARGB(alpha, red, green, blue); *dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 8: case 8:
red = *bufptr++; b = *bufptr++;
alpha = 0xff; a = 0xff;
if (palette && red >= palcnt) if (palette)
goto quit; {
if (b >= palcnt)
goto quit;
r = palette[b * palbpp + 2];
g = palette[b * palbpp + 1];
b = palette[b * palbpp + 0];
}
else
{
r = g = b;
}
for (i = 0; (i < count) && (dataptr < final_pixel); i++) for (i = 0; (i < count) && (dataptr < final_pixel); i++)
if (!palette) *dataptr++ = PIXEL_ARGB(a, r, g, b);
{
*dataptr++ = PIXEL_ARGB(alpha, red, red, red);
}
else
{
*dataptr++ =
PIXEL_ARGB(alpha,
palette[red * palbpp + 2],
palette[red * palbpp + 1],
palette[red * palbpp + 0]);
}
break; break;
} }
} /* end if (RLE packet) */ } /* end if (RLE packet) */
@ -455,37 +454,37 @@ load(ImlibImage * im, ImlibProgressFunction progress,
switch (bpp) switch (bpp)
{ {
case 32: /* 32-bit BGRA pixels */ case 32: /* 32-bit BGRA pixels */
*dataptr++ = b = *bufptr++;
PIXEL_ARGB(bufptr[3], bufptr[2], bufptr[1], g = *bufptr++;
bufptr[0]); r = *bufptr++;
bufptr += 4; a = *bufptr++;
*dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 24: /* 24-bit BGR pixels */ case 24: /* 24-bit BGR pixels */
*dataptr++ = b = *bufptr++;
PIXEL_ARGB(0xff, bufptr[2], bufptr[1], g = *bufptr++;
bufptr[0]); r = *bufptr++;
bufptr += 3; a = 0xff;
*dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
case 8: /* 8-bit grayscale or palette */ case 8: /* 8-bit grayscale or palette */
if (!palette) b = *bufptr++;
a = 0xff;
if (palette)
{ {
*dataptr++ = if (b >= palcnt)
PIXEL_ARGB(0xff, bufptr[0], bufptr[0], goto quit;
bufptr[0]); r = palette[b * palbpp + 2];
g = palette[b * palbpp + 1];
b = palette[b * palbpp + 0];
} }
else else
{ {
if (bufptr[0] >= palcnt) r = g = b;
goto quit;
*dataptr++ =
PIXEL_ARGB(0xff,
palette[*bufptr * palbpp + 2],
palette[*bufptr * palbpp + 1],
palette[*bufptr * palbpp + 0]);
} }
bufptr += 1; *dataptr++ = PIXEL_ARGB(a, r, g, b);
break; break;
} }
} }