engine: imagelib: img_bmp: support for big endian RGB format

Allows software rendering save screenshots
This commit is contained in:
Max Parry
2025-12-06 19:46:25 +11:00
committed by GitHub
parent 2c20734ad3
commit 2ef374ff4a

View File

@@ -359,9 +359,11 @@ qboolean Image_SaveBMP( const char *name, rgbdata_t *pix )
case PF_INDEXED_32:
pixel_size = 1;
break;
case PF_BGR_24:
case PF_RGB_24:
pixel_size = 3;
break;
case PF_BGRA_32:
case PF_RGBA_32:
pixel_size = 4;
break;
@@ -438,9 +440,11 @@ qboolean Image_SaveBMP( const char *name, rgbdata_t *pix )
else
{
// 24 bit
pbBmpBits[i*pixel_size+0] = pb[x*pixel_size+2];
pbBmpBits[i*pixel_size+1] = pb[x*pixel_size+1];
pbBmpBits[i*pixel_size+2] = pb[x*pixel_size+0];
qboolean be = !!( pix->type & (PF_BGR_24|PF_BGRA_32) ); // is it big endian RGB?
pbBmpBits[i*pixel_size+(be?2:0)] = pb[x*pixel_size+2];
pbBmpBits[i*pixel_size+(be?1:1)] = pb[x*pixel_size+1];
pbBmpBits[i*pixel_size+(be?0:2)] = pb[x*pixel_size+0];
}
if( pixel_size == 4 ) // write alpha channel