int MkSurface::SaveImageData( const string &from, MemBuffer &out, bool tp ) { int rc = LoadBMP( from.c_str() ); if ( rc == 0 ) { if ( s_surface->format->BitsPerPixel == 8 ) { SDL_Palette *palette = s_surface->format->palette; int i; out.Write16( Width() ); out.Write16( Height() ); out.Write8( s_surface->format->BitsPerPixel ); out.Write8( tp ? RAW_DATA_TRANSPARENT : 0 ); out.Write16( palette->ncolors ); // only for <= 256 colors (bpp = 8) if ( tp ) { int ck = GuessColorKey(); // transparent color first out.Write8( palette->colors[ck].r ); out.Write8( palette->colors[ck].g ); out.Write8( palette->colors[ck].b ); } for ( i = 0; i < palette->ncolors; ++i ) { out.Write8( palette->colors[i].r ); out.Write8( palette->colors[i].g ); out.Write8( palette->colors[i].b ); } // save surface lines to file for ( i = 0; i < Height(); ++i ) { Uint8 *pix = (Uint8 *)s_surface->pixels + i * s_surface->pitch; out.Write( pix, Width() ); } } else { cerr << "Error: Couldn't find palette in image " << from << endl << "Make sure it is 8 bit (<= 256 colors) only" << endl; rc = -1; } } else cerr << "Error: Couldn't load image " << from << endl; return rc; }