Compatibility between progressive and sequential coding is achieved by dividing an image into stripes. Each stripe is a horizontal bar with a user definable height. A progressive coded image can be decoded sequentially by decoding each stripe, beginning by the one at the top of the image, to its full resolution, and then proceeding to the next stripe. Progressive decoding can be done by decoding only a specific resolution layer from all stripes. After dividing an image into bitplanes, resolution layers and stripes, eventually a number of small bi-level bitmaps are left to compress.
Compression is done using a Q-coder.
Differential layer contexts contain pixels in the layer to be coded, and in the corresponding lower resolution layer. For each combination of pixel values in a context, the probability distribution of black and white pixels can be different. In an all white context, the probability of coding a white pixel will be much greater than that of coding a black pixel. The Q-coder assigns, just like a Huffman coder, more bits to less probable symbols, and so achieves compression. The Q-coder therefore continuously adapts these probabilities to the symbols it sees.