engine: imagelib: img_quant: reduce used colors from 256 to 255, so last color in palette can be reserved for custom usage (like transparency in player decals)

This commit is contained in:
Alibek Omarov
2025-07-25 01:39:59 +05:00
parent 24f05e3fc5
commit cd26b1f279
2 changed files with 17 additions and 13 deletions

View File

@@ -141,14 +141,10 @@ qboolean CL_ConvertImageToWAD3( const char *filename )
if( !quant || !quant->buffer || !quant->palette )
goto cleanup;
// remap palette index 255 to 254 to avoid transparency conflicts
for( i = 0; i < width * height; ++i )
// set index 255 for transparent pixels in rgba images
if( image->type == PF_RGBA_32 )
{
if( quant->buffer[i] == 255 )
quant->buffer[i] = 254;
// set index 255 for transparent pixels in rgba images
if( image->type == PF_RGBA_32 )
for( i = 0; i < width * height; ++i )
{
if( image->buffer[i * 4 + 3] <= SPRAY_ALPHA_THRESHOLD )
quant->buffer[i] = 255;

View File

@@ -15,12 +15,13 @@ GNU General Public License for more details.
#include "imagelib.h"
#define palettesize 256
#define netsize 255 // number of colours used
#define netsize 256 // number of colours used
#define prime1 499
#define prime2 491
#define prime3 487
#define prime4 503
#define prime1 499
#define prime2 491
#define prime3 487
#define prime4 503
#define minpicturebytes (3*prime4) // minimum size for input image
@@ -446,7 +447,7 @@ rgbdata_t *Image_Quantize( rgbdata_t *pic )
learn();
unbiasnet();
pic->palette = Mem_Malloc( host.imagepool, netsize * 3 );
pic->palette = Mem_Malloc( host.imagepool, palettesize * 3 );
for( i = 0; i < netsize; i++ )
{
@@ -455,6 +456,13 @@ rgbdata_t *Image_Quantize( rgbdata_t *pic )
pic->palette[i*3+2] = network[i][2]; // blue
}
for( ; i < palettesize; i++ )
{
pic->palette[i*3+0] = 0;
pic->palette[i*3+1] = 0;
pic->palette[i*3+2] = 0;
}
inxbuild();
for( i = 0; i < image.width * image.height; i++ )