Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

SaveTGA.cpp

Go to the documentation of this file.
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     // generate the header
00022     byte header[18];
00023     header[0] = 0;               // id_length
00024     header[1] = 0;               // cm_type
00025     header[2] = 2;               // image_type (uncompressed true color)
00026     write16_le(header + 3,  0);  // cm_first
00027     write16_le(header + 5,  0);  // cm_length
00028     header[7] = 0;               // cm_entry_size
00029     write16_le(header + 8,  0);  // x_origin
00030     write16_le(header + 10, 0);  // y_origin
00031     write16_le(header + 12, width);
00032     write16_le(header + 14, height);
00033     header[16] = 32;             // pixel_depth
00034     header[17] = (1 << 5) | 7;   // origin at upper/left, 8 bits of alpha data
00035 
00036     if (file->write(header, 18) != 18) {
00037       return false;
00038     }
00039 
00040     // write pixels
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 }

Generated on Thu Oct 2 12:59:32 2003 for corona by doxygen1.3-rc1