refactor WriteTGA24()

This commit is contained in:
Garux 2019-11-11 03:28:26 +03:00
parent 49c602d793
commit 3464341167

View File

@ -60,28 +60,29 @@
*/ */
void WriteTGA24( char *filename, byte *data, int width, int height, qboolean flip ){ void WriteTGA24( char *filename, byte *data, int width, int height, qboolean flip ){
int i, c; int i;
byte *buffer, *in; const int headSz = 18;
const int sz = width * height * 3 + headSz;
byte *buffer, *pix, *in;
FILE *file; FILE *file;
/* allocate a buffer and set it up */ /* allocate a buffer and set it up */
buffer = safe_malloc( width * height * 3 + 18 ); buffer = safe_malloc( sz );
memset( buffer, 0, 18 ); pix = buffer + headSz;
buffer[ 2 ] = 2; memset( buffer, 0, headSz );
buffer[ 2 ] = 2; // uncompressed type
buffer[ 12 ] = width & 255; buffer[ 12 ] = width & 255;
buffer[ 13 ] = width >> 8; buffer[ 13 ] = width >> 8;
buffer[ 14 ] = height & 255; buffer[ 14 ] = height & 255;
buffer[ 15 ] = height >> 8; buffer[ 15 ] = height >> 8;
buffer[ 16 ] = 24; buffer[ 16 ] = 24; // pixel size
/* swap rgb to bgr */ /* swap rgb to bgr */
c = ( width * height * 3 ) + 18; for ( i = 0; i < sz - headSz; i += 3 )
for ( i = 18; i < c; i += 3 )
{ {
buffer[ i ] = data[ i - 18 + 2 ]; /* blue */ pix[ i + 0 ] = data[ i + 2 ]; /* blue */
buffer[ i + 1 ] = data[ i - 18 + 1 ]; /* green */ pix[ i + 1 ] = data[ i + 1 ]; /* green */
buffer[ i + 2 ] = data[ i - 18 + 0 ]; /* red */ pix[ i + 2 ] = data[ i + 0 ]; /* red */
} }
/* write it and free the buffer */ /* write it and free the buffer */
@ -92,12 +93,12 @@ void WriteTGA24( char *filename, byte *data, int width, int height, qboolean fli
/* flip vertically? */ /* flip vertically? */
if ( flip ) { if ( flip ) {
fwrite( buffer, 1, 18, file ); fwrite( buffer, 1, headSz, file );
for ( in = buffer + ( ( height - 1 ) * width * 3 ) + 18; in >= buffer; in -= ( width * 3 ) ) for ( in = pix + ( ( height - 1 ) * width * 3 ); in >= pix; in -= ( width * 3 ) )
fwrite( in, 1, ( width * 3 ), file ); fwrite( in, 1, ( width * 3 ), file );
} }
else{ else{
fwrite( buffer, 1, c, file ); fwrite( buffer, 1, sz, file );
} }
/* close the file */ /* close the file */