public Bitmap getRegionBitmap()

in src/main/java/org/apache/pdfbox/jbig2/segments/GenericRefinementRegion.java [193:256]


    public Bitmap getRegionBitmap()
            throws IOException, IntegerMaxValueException, InvalidHeaderValueException
    {
        if (null == regionBitmap)
        {
            /* 6.3.5.6 - 1) */
            int isLineTypicalPredicted = 0;

            if (referenceBitmap == null)
            {
                // Get the reference bitmap, which is the base of refinement process
                referenceBitmap = getGrReference();
            }

            if (arithDecoder == null)
            {
                arithDecoder = new ArithmeticDecoder(subInputStream);
            }

            if (cx == null)
            {
                cx = new CX(8192, 1);
            }

            /* 6.3.5.6 - 2) */
            regionBitmap = new Bitmap(regionInfo.getBitmapWidth(), regionInfo.getBitmapHeight());

            if (templateID == 0)
            {
                // AT pixel may only occur in template 0
                updateOverride();
            }

            final int paddedWidth = (regionBitmap.getWidth() + 7) & -8;
            final int deltaRefStride = isTPGROn ? -referenceDY * referenceBitmap.getRowStride() : 0;
            final int yOffset = deltaRefStride + 1;

            /* 6.3.5.6 - 3 */
            for (int y = 0; y < regionBitmap.getHeight(); y++)
            {
                /* 6.3.5.6 - 3 b) */
                if (isTPGROn)
                {
                    isLineTypicalPredicted ^= decodeSLTP();
                }

                if (isLineTypicalPredicted == 0)
                {
                    /* 6.3.5.6 - 3 c) */
                    decodeOptimized(y, regionBitmap.getWidth(), regionBitmap.getRowStride(),
                            referenceBitmap.getRowStride(), paddedWidth, deltaRefStride, yOffset);
                }
                else
                {
                    /* 6.3.5.6 - 3 d) */
                    decodeTypicalPredictedLine(y, regionBitmap.getWidth(),
                            regionBitmap.getRowStride(), referenceBitmap.getRowStride(),
                            paddedWidth, deltaRefStride);
                }
            }
        }
        /* 6.3.5.6 - 4) */
        return regionBitmap;
    }