ImageFormat_PNG::ImageFormat_PNG(const Asset& asset): png_ptr_(0), info_ptr_(0) { if (asset.Open()) { png_ptr_ = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); Assert(png_ptr_,"Couldn't create png read struct"); if (!png_ptr_) { return; } info_ptr_ = png_create_info_struct((png_structp)png_ptr_); Assert(info_ptr_,"Couldn't create png info struct"); if (!info_ptr_) { png_destroy_read_struct((png_structpp)&png_ptr_, 0,0); return; } png_set_read_fn(static_cast<png_structp>(png_ptr_), const_cast<Asset*>(&asset), png_user_read_fn); png_read_png(static_cast<png_structp>(png_ptr_), static_cast<png_infop>(info_ptr_), /*PNG_TRANSFORM_STRIP_16|*/PNG_TRANSFORM_EXPAND|PNG_TRANSFORM_BGR, 0); asset.Close(); } }
bool ImageFormat_TGA::TestAsset(const Asset& asset) { // Check if the footer says that this is a TGA file if (asset.Open()) { asset.Seek(-18,Asset::SEEK_FROM_END); char buffer[16]; asset.Read(buffer,16); asset.Close(); if (StrNCmp(buffer,"TRUEVISION-XFILE",16)==0) { return true; } } // If the footer doesn't match, this might still be a tga file (version < 2) // so try and load it as a tga and see if it works... int size=asset.GetSize(); char* buffer=new char[size]; asset.Open(); asset.Read(buffer,size); asset.Close(); tga_image image; tga_read_from_Buffer(&image,buffer); delete[] buffer; // Check to see if the header data makes sense... if (image.width<32767 && image.height<32767 && image.image_data && (image.pixel_depth==8 || image.pixel_depth==24 || image.pixel_depth==16 || image.pixel_depth==32)) { // Yeah, sure, this looks like proper data, so give thumbs up and hope for the best return true; } tga_free_buffers(&image); // Nope, not likely to be a TGA return false; }
ImageFormat_TGA::ImageFormat_TGA(const Asset& asset): image_(0) { int size=asset.GetSize(); char* buffer=new char[size]; asset.Open(); asset.Read(buffer,size); asset.Close(); image_=new tga_image; tga_read_from_Buffer(static_cast<tga_image*>(image_),buffer); delete[] buffer; }
bool AudioFormat_YM::TestAsset(const Asset& asset) { if (asset.Open()) { char buffer[7]; asset.Read(buffer,7); asset.Close(); if (StrNCmp(&buffer[2],"-lh5-",5)==0 || StrNCmp(buffer,"YM3!",4)==0) { return true; } } return false; }
bool ImageFormat_GIF::TestAsset(const Asset& asset) { if (asset.Open()) { char buffer[3]; asset.Read(buffer,3); asset.Close(); if (StrNCmp(buffer,"GIF",3)==0) { return true; } } return false; }
bool ImageFormat_PNG::TestAsset(const Asset& asset) { // Check if the header matches PNG files if (asset.Open()) { unsigned char pngheader[]={137,80,78,71,13,10,26,10}; unsigned char buffer[8]; asset.Read(buffer,8); asset.Close(); if (MemCmp(buffer,pngheader,8)==0) { return true; } } return false; }
AudioFormat_YM::AudioFormat_YM(const Asset& asset): ymFile_(0), chunkStart_(0), chunkEnd_(0) { if (asset.Open()) { int size=asset.GetSize(); unsigned char* buffer=static_cast<unsigned char*>(Malloc(size)); asset.Read(buffer,size); asset.Close(); ymFile_=new CYmMusic(); ymFile_->loadMemory(buffer,size); ymFile_->setLoopMode(true); ymFile_->play(); Free(buffer); } // Report missing file #ifdef _DEBUG else { const char* filename=asset.GetFilename().GetString(); if (filename) { char errorMessage[1024]; SNPrintF(errorMessage,1024,"File not found: %s",filename); Assert(false,errorMessage); } else { Assert(false,"An asset could not be accessed."); } } #endif }
void Bitmap_RLE8::Load(const Asset& asset) { if (asset.Open()) { char header[8]; asset.Read(header,8); if (StrNCmp(header,"PIXRLE8B",8)==0) { int version=0; asset.Read(&version); if (version==0) { int celCount=0; asset.Read(&celCount); if (celCount>=1) { ReadFromAsset(&asset); } } } else if (StrNCmp(header,"PIXIE_RL",8)==0) { char c; asset.Read(&c); int version=0; asset.Read(&version); if (version==0) { int celCount=0; asset.Read(&celCount); if (celCount>=1) { ReadFromAsset(&asset); } } } else { Assert(false,"Invalid RLE header"); } } // Report missing file #ifdef _DEBUG else { const char* filename=asset.GetFilename().GetString(); if (filename) { char errorMessage[1024]; SNPrintF(errorMessage,1024,"File not found: %s",filename); Assert(false,errorMessage); } else { Assert(false,"An asset could not be accessed."); } } #endif }