/*****************/ /*** Layer RGB ***/ /*****************/ #include #include #include "MkLevelLayer.h" #include "MkLevelLayerRGB.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ CMkLevelLayerRGB::CMkLevelLayerRGB(sExpLayerHdr *LayerHdr) { int *iPtr; u8 *Ptr=(u8*)LayerHdr; Type=LayerHdr->Type; SubType=LayerHdr->SubType; Width=LayerHdr->Width; Height=LayerHdr->Height; RGBMap.SetSize(Width,Height); iPtr=(int*)(Ptr+sizeof(sExpLayerHdr)); sRGBCol *RGB=(sRGBCol*)iPtr; ShadeRGB=*RGB++; for (int Y=0; Y void CMkLevelLayerRGB::PreProcess(CMkLevel *Core) { int Size=Width*Height; int X,Y,Ofs; vector SourcePal; vector DestPal; vector RemapMap; SourcePal.resize(Width*Height*3); RemapMap.resize(Width*Height); DestPal.resize(NUM_OF_PAL_ENTRIES*3); Ofs=0; for (Y=0; Y %3d %3d %3d\n",ThisElem.RGB.R,ThisElem.RGB.G,ThisElem.RGB.B,DestPal[(Idx*3)+0],DestPal[(Idx*3)+1],DestPal[(Idx*3)+2]); } } ColorCount++; printf("RGB remapped to %i colors\n",ColorCount); // Build Out RGB Table OutRGBTable.SetSize(ColorCount,16); float RInc=(ShadeRGB.R-128)/16.0f; float GInc=(ShadeRGB.G-128)/16.0f; float BInc=(ShadeRGB.B-128)/16.0f; for (int c=0;c255) R=255; if (G<0) G=0; else if (G>255) G=255; if (B<0) B=0; else if (B>255) B=255; RGB.R=R; RGB.G=G; RGB.B=B; OutRGBTable.Set(c,s,RGB); } } } /*****************************************************************************/ /*****************************************************************************/ /*** Process *****************************************************************/ /*****************************************************************************/ /*****************************************************************************/ void CMkLevelLayerRGB::Process(CMkLevel *Core) { } /*****************************************************************************/ /*****************************************************************************/ /** Write ********************************************************************/ /*****************************************************************************/ /*****************************************************************************/ int CMkLevelLayerRGB::Write(CMkLevel *Core,FILE *File,const char *LayerName) { int ThisPos=ftell(File); sLayerHdr Hdr; sLayerRGBHdr RGBHdr; Hdr.Type=Type; Hdr.SubType=SubType; Hdr.Width=Width; Hdr.Height=Height; fwrite(&Hdr,sizeof(sLayerHdr),1,File); int HdrPos=ftell(File); fwrite(&RGBHdr,sizeof(sLayerRGBHdr),1,File); RGBHdr.RGBMap=WriteRGBMap(File); PadFile(File); RGBHdr.RGBTable=WriteRGBTable(File); PadFile(File); // rewrite header int RetPos=ftell(File); fseek(File,HdrPos,SEEK_SET); fwrite(&RGBHdr,sizeof(sLayerRGBHdr),1,File); fseek(File,RetPos,SEEK_SET); Size=ftell(File)-ThisPos; return(ThisPos); } /*****************************************************************************/ int CMkLevelLayerRGB::WriteRGBMap(FILE *File) { int ThisPos=ftell(File); for (int Y=0; Y RGBMap %i %i\n",ThisPos,ftell(File)-ThisPos); return(ThisPos); } /*****************************************************************************/ int CMkLevelLayerRGB::WriteRGBTable(FILE *File) { int ThisPos=ftell(File); int ListSize=OutRGBTable.GetWidth(); for (int c=0; c RGBTable %i %i\n",ThisPos,ftell(File)-ThisPos); return(ThisPos); }