#pragma once #include"DataType.h" #include #include #include #define TILE_WIDTH 16 #define TILE_HEIGHT 16 #define TILE_SCALE_MOVE_BIT 8 bool SaveToTGA(const char *filename,void *data,const uint16 width,const uint16 height,const uint8 bit,const bool flip); template class Bitmap { int width,height; uint32 line_bytes; uint32 total_bytes; D *data; public: const int GetWidth ()const{return width;} const int GetHeight ()const{return height;} const int GetColorByte()const{return N;} D * GetData ()const{return data;} const uint32 GetLineBytes()const{return line_bytes;} const uint32 GetTotalBytes()const{return total_bytes;} public: Bitmap() { width=height=0; line_bytes=total_bytes=0; data=nullptr; } Bitmap(int w,int h) { if(w>0&&h>>0) { width=w; height=h; line_bytes=width*N*sizeof(D); total_bytes=line_bytes*height; data=new D[width*height*N]; memset(data,0,total_bytes); } else { width=height=0; line_bytes=total_bytes=0; data=nullptr; } } ~Bitmap() { delete[] data; } void Clear() { if(!data)return; memset(data,0,total_bytes); } void CopyFrom(const Bitmap *bmp) { if(!bmp)return; if(width!=bmp->width)return; if(height!=bmp->height)return; memcpy(data,bmp->data,total_bytes); } D *GetPointer(const int row) { if(row<0||row>=height)return(nullptr); return data+(row*width)*N; } D *GetPointer(const int x,const int y) { // if(x<0||x>=width)return(nullptr); // if(y<0||y>=height)return(nullptr); return data+(x+(y*width))*N; } bool GetPixel(D *color,const int x,const int y) const { if(x<0||x>=width ||y<0||y>=height)return(false); memcpy(color,data+(y*width+x)*N,N*sizeof(D)); return(true); } void GetPixelByFloatPos(D *color,const float fx,const float fy) const { const uint x=fx*width; const uint y=fy*height; memcpy(color,data+(y*width+x)*N,N*sizeof(D)); } void SaveToTGA(const std::string &filename,const bool flip) { ::SaveToTGA(filename.c_str(),data,width,height,N<<3,flip); } };//template class Bitmap using Bitmap8=Bitmap; using Bitmap16=Bitmap; using Bitmap24=Bitmap; using Bitmap32=Bitmap; using Bitmap1f=Bitmap; using Bitmap3f=Bitmap; Bitmap8 *ConvertToU8(const Bitmap1f *);