void JB2Dict::JB2Codec::Decode::code_bitmap_directly( GBitmap &bm,const int dw, int dy, unsigned char *up2, unsigned char *up1, unsigned char *up0 ) { ZPCodec &zp=*gzp; // iterate on rows (decoding) while (dy >= 0) { int context=get_direct_context(up2, up1, up0, 0); for(int dx=0;dx < dw;) { int n = zp.decoder(bitdist[context]); up0[dx++] = n; context=shift_direct_context(context, n, up2, up1, up0, dx); } // next row dy -= 1; up2 = up1; up1 = up0; up0 = bm[dy]; } #ifndef NDEBUG bm.check_border(); #endif }
void JB2Dict::JB2Codec::Encode::code_bitmap_directly( GBitmap &bm,const int dw, int dy, unsigned char *up2, unsigned char *up1, unsigned char *up0 ) { ZPCodec &zp=*gzp; // iterate on rows (encoding) while (dy >= 0) { int context=get_direct_context(up2, up1, up0, 0); for (int dx=0;dx < dw;) { int n = up0[dx++]; zp.encoder(n, bitdist[context]); context=shift_direct_context(context, n, up2, up1, up0, dx); } // next row dy -= 1; up2 = up1; up1 = up0; up0 = bm[dy]; } }