00001 #include <memory>
00002 #include <png.h>
00003 #include "Debug.h"
00004 #include "Save.h"
00005 #include "Utility.h"
00006
00007
00008 namespace corona {
00009
00010 bool SaveTGA(File* file, Image* source) {
00011 COR_GUARD("SaveTGA");
00012
00013 std::auto_ptr<Image> image(CloneImage(source, PF_B8G8R8A8));
00014 if (!image.get()) {
00015 return false;
00016 }
00017
00018 const int width = image->getWidth();
00019 const int height = image->getHeight();
00020
00021
00022 byte header[18];
00023 header[0] = 0;
00024 header[1] = 0;
00025 header[2] = 2;
00026 write16_le(header + 3, 0);
00027 write16_le(header + 5, 0);
00028 header[7] = 0;
00029 write16_le(header + 8, 0);
00030 write16_le(header + 10, 0);
00031 write16_le(header + 12, width);
00032 write16_le(header + 14, height);
00033 header[16] = 32;
00034 header[17] = (1 << 5) | 7;
00035
00036 if (file->write(header, 18) != 18) {
00037 return false;
00038 }
00039
00040
00041 const int data_size = width * height * 4;
00042 if (file->write(image->getPixels(), data_size) != data_size) {
00043 return false;
00044 }
00045
00046 return true;
00047 }
00048
00049 }