C++存储tga图片

网上有很多关于TGA图片读取的代码,但是还没有相关的存储代码,工作需要,自己写了一个。

工作只要求到写32位,未压缩的,RGBA颜色格式的图片,所以channels没有设置参数,我这里默认是4了

 

_void SaveTGA( const _char *filename, _dword width, _dword height, const _byte *data )

{

// 自定义写数据类型

typedef unsigned char _pixel;

// 打开文件

FILE *savefile = fopen(filename, "wb");

 

// set to {0,0,2,0,0,0,0,0,0,0,0,0} uncompressed tga,我只写未压缩的tga

_pixel type_header[12] =  {0,0,2,0,0,0,0,0,0,0,0,0};

fwrite(  type_header,12*sizeof( _pixel  ),1,savefile );

 

_pixel header[6];

header[0] = width % 256; //图片width 的 lowbyte

header[1] = width / 256; //图片width 的 highbyte

header[2] = height % 256; //图片height 的 lowbyte

header[3] = height / 256; //图片height的 highbyte

header[4] = 32; //位深

header[5] = 8; //每种颜色的位深

 

fwrite( header, 6*sizeof( _pixel ),1,savefile );

 

unsigned int image_size= 4*width*height;

// capy data

_pixel * invert_data = new _pixel [image_size];

memset( invert_data,0,image_size*sizeof( _pixel ) );

for( unsigned int i=0; i

{

invert_data[ i ]  = data[ i ];

}

// Swap red and blue,RGB转为BGR

for ( unsigned int cswap = 0; cswap < image_size; cswap += 4 )

{

_pixel r = invert_data[cswap];

invert_data[cswap] = invert_data[cswap + 2];

invert_data[cswap + 2] = r;

}

 

fwrite( invert_data,image_size*sizeof( _pixel ),1,savefile );

 

delete invert_data;

 

fclose( savefile );

}

 

你可能感兴趣的:(图形学)