refactor WriteTGA24()
This commit is contained in:
parent
49c602d793
commit
3464341167
|
|
@ -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 */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user