corona
1.0.2
|
00001 #ifdef _MSC_VER 00002 #pragma warning(disable : 4786) 00003 #endif 00004 00005 00006 #include <memory> 00007 #include <png.h> 00008 #include "Debug.h" 00009 #include "Save.h" 00010 #include "Utility.h" 00011 00012 00013 namespace corona { 00014 00015 bool SaveTGA(File* file, Image* source) { 00016 COR_GUARD("SaveTGA"); 00017 00018 std::auto_ptr<Image> image(CloneImage(source, PF_B8G8R8A8)); 00019 if (!image.get()) { 00020 return false; 00021 } 00022 00023 const int width = image->getWidth(); 00024 const int height = image->getHeight(); 00025 00026 // generate the header 00027 byte header[18]; 00028 header[0] = 0; // id_length 00029 header[1] = 0; // cm_type 00030 header[2] = 2; // image_type (uncompressed true color) 00031 write16_le(header + 3, 0); // cm_first 00032 write16_le(header + 5, 0); // cm_length 00033 header[7] = 0; // cm_entry_size 00034 write16_le(header + 8, 0); // x_origin 00035 write16_le(header + 10, 0); // y_origin 00036 write16_le(header + 12, width); 00037 write16_le(header + 14, height); 00038 header[16] = 32; // pixel_depth 00039 header[17] = (1 << 5) | 7; // origin at upper/left, 8 bits of alpha data 00040 00041 if (file->write(header, 18) != 18) { 00042 return false; 00043 } 00044 00045 // write pixels 00046 const int data_size = width * height * 4; 00047 if (file->write(image->getPixels(), data_size) != data_size) { 00048 return false; 00049 } 00050 00051 return true; 00052 } 00053 00054 }