网上有很多关于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 ); }