uint32 Decompress(const unsigned char* lzoBuff, uint32 lzoBuffLen, iDynamicBuffer& rawBuff) { uint16 hdr; memcpy(&hdr, lzoBuff, sizeof(uint16)); lzoBuffLen -= sizeof(uint16); lzoBuff += sizeof(uint16); if (hdr != LZO_BLOCK_HDR) { check(0); return 0; } unsigned long raw_buf_len; memcpy(&raw_buf_len, lzoBuff, sizeof(unsigned long)); lzoBuffLen -= sizeof(uint32); lzoBuff += sizeof(uint32); if (raw_buf_len <= 0 || raw_buf_len > LZO_MAX_BUF_LEN) { check(0); return 0; } rawBuff.ReInit(raw_buf_len); rawBuff.IncSize( raw_buf_len ); int res = lzo1x_decompress(lzoBuff,lzoBuffLen,(unsigned char*)rawBuff.GetData(),&raw_buf_len,NULL); if (res != LZO_E_OK) { check(0); return 0; } return raw_buf_len; }
bool iMemoryDib::Bit2Byte(const iDynamicBuffer& in_buff, iDynamicBuffer& out_buff) { check(in_buff.GetSize()); uint32 nsiz = in_buff.GetSize()*8; out_buff.ReInit(nsiz); for (uint32 xx=0; xx<in_buff.GetSize(); ++xx){ uint8 data; in_buff.Read(data); for (uint32 zz=0; zz<8; ++zz){ uint8 bd = (uint8)(((data >> zz)&1)?255:0); out_buff.Write(bd); } } return true; }
bool iMemoryDib::Byte2Bit(const iDynamicBuffer& in_buff, iDynamicBuffer& out_buff) { check(in_buff.GetSize()); uint32 nsiz = in_buff.GetSize()/8 + ((in_buff.GetSize()%8==0)?0:1); out_buff.ReInit(nsiz); for (uint32 xx=0; xx<nsiz; ++xx){ uint32 cnt=0; uint8 data=0; uint8 odata=0; while (cnt<8 && in_buff.Read(data)) { odata |= (data?1<<cnt:0); cnt++; } out_buff.Write(odata); } out_buff.Seek(0); return true; }