private MGRB LoadBitmap(long offset) { MGRB bc = new MGRB(); if (offset == -1) { return(bc); } FileStream bmp = _bitmapFileRead; bmp.Seek(offset, SeekOrigin.Begin); var hdr = new byte[_hdrlen]; bmp.Read(hdr, 0, hdr.Length); if (hdr[0] == (byte)'b' && hdr[1] == (byte)'m') { int c = Helper.ToInt32(hdr, 3); var b = new byte[c]; bmp.Read(b, 0, c); if (hdr[2] == 1) { b = MiniLZO.Decompress(b); } bc.Deserialize(fastBinaryJSON.BJSON.ToObject <MGRBData>(b)); } else { log.Error("bitmap not recognized"); } return(bc); }
private void ReadFile() { byte[] b = File.ReadAllBytes(_path + _filename); var o = fastBinaryJSON.BJSON.ToObject <MGRBData>(b); _bits = new MGRB(); _bits.Deserialize(o); }
private void InitializeFreeList() { if (_lastBlockNumber < 0) { // write master block _datawrite.Write(new byte[_BLOCKSIZE], 0, _BLOCKSIZE); _lastBlockNumber = 1; //_masterblock.Add("freelist", -1); } else { _freeList = new MGRB(); // read master block data var b = ReadBlock(0); if (b[0] == (byte)'F' && b[1] == (byte)'L') { // get free block num and size int block = Helper.ToInt32(b, 2); int len = Helper.ToInt32(b, 2 + 4); int freeblock = block; b = new byte[len]; var offset = 0; bool failed = false; // read blocks upto size from block num SeekBlock(block); while (len > 0) { // check header var bb = ReadBlock(block++); if (bb[0] != (byte)'F' || bb[1] != (byte)'L') { // throw exception?? _log.Error("Free list header does not match : " + _filename); failed = true; break; } int c = len > _BLOCKSIZE ? _BLOCKSIZE - 2 : len; Buffer.BlockCopy(bb, 2, b, offset, c); len -= c; offset += c; } if (failed == false) { // read freelist from master block from end of file var o = fastBinaryJSON.BJSON.ToObject <MGRBData>(b); _freeList.Deserialize(o); // truncate end of file freelist blocks if lastblock < file size if (_datawrite.Length > _lastBlockNumber * _BLOCKSIZE) { _datawrite.SetLength(_lastBlockNumber * _BLOCKSIZE); } } _lastBlockNumber = freeblock; } } }
public MGRB Copy() { if (_containers.Count() > 0) { var o = Serialize(); var m = new MGRB(); m.Deserialize(o); return(m); } return(new MGRB()); }