C++读写Tga文件

来源:互联网 发布:交换机网管软件 编辑:程序博客网 时间:2024/05/01 09:49
// tga.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <Windows.h>#include <math.h>#include <iostream>using namespace std;#define RGB2INT(r,g,b) (r*256*256 + g*256 + b)void SaveTGA( const char *filename, DWORD width, DWORD height, const byte *data ){FILE *savefile = fopen(filename, "wb");byte type_header[12] =  {0,0,2,0,0,0,0,0,0,0,0,0};fwrite(  type_header,12*sizeof( byte ),1,savefile );byte header[6];header[0] = width % 256;header[1] = width / 256;header[2] = height % 256;header[3] = height / 256;header[4] = 32;header[5] = 8;fwrite( header, 6*sizeof( byte ),1,savefile );unsigned int image_size= 4*width*height;byte * invert_data = new byte [image_size];memset( invert_data,0,image_size*sizeof( byte ) );for( unsigned int i=0; i<image_size; i++ ){invert_data[ i ]  = data[ i ];}// Swap red and blue,RGB转为BGRfor ( unsigned int cswap = 0; cswap < image_size; cswap += 4 ){byte r = invert_data[cswap];invert_data[cswap] = invert_data[cswap + 2];invert_data[cswap + 2] = r;}fwrite( invert_data,image_size*sizeof( byte ),1,savefile );fclose( savefile );delete [] invert_data;}void GetTGASize(const char *filename, DWORD& width, DWORD& height){FILE *of = fopen(filename, "rb");byte type_header[12];fread( type_header, sizeof(byte), 12, of);byte header[6];fread( header, sizeof(byte), 6, of);width = header[1] * 256 + header[0];height = header[3] * 256 + header[2];fclose( of );}bool ReadTGA(const char *filename, byte* data, int dataSize){FILE *of = fopen(filename, "rb");byte type_header[12];fread( type_header, sizeof(byte), 12, of);byte header[6];fread( header, sizeof(byte), 6, of);if (header[4] != 32){return false;}fread(data, sizeof(byte), dataSize, of);// Swap red and blue,RGB转为BGRfor ( unsigned int i = 0; i < dataSize; i += 4 ){byte r = data[i];data[i] = data[i + 2];data[i + 2] = r;}fclose( of );}int _tmain(int argc, _TCHAR* argv[]){#define PIXELS 24*24byte data[PIXELS * 4];ReadTGA("Tili.tga", data, PIXELS * 4);SaveTGA("Tili2.tga", 24, 24, data);return 0;}


适用于32位色的无压缩tga文件。

原创粉丝点击