Leptonica  1.82.0
Image processing and image analysis suite
boxbasic.c File Reference
#include <string.h>
#include "allheaders.h"

Go to the source code of this file.

Functions

BOXboxCreate (l_int32 x, l_int32 y, l_int32 w, l_int32 h)
 
BOXboxCreateValid (l_int32 x, l_int32 y, l_int32 w, l_int32 h)
 
BOXboxCopy (BOX *box)
 
BOXboxClone (BOX *box)
 
void boxDestroy (BOX **pbox)
 
l_ok boxGetGeometry (BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
 
l_ok boxSetGeometry (BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h)
 
l_ok boxGetSideLocations (BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb)
 
l_ok boxSetSideLocations (BOX *box, l_int32 l, l_int32 r, l_int32 t, l_int32 b)
 
l_int32 boxGetRefcount (BOX *box)
 
l_ok boxChangeRefcount (BOX *box, l_int32 delta)
 
l_ok boxIsValid (BOX *box, l_int32 *pvalid)
 
BOXAboxaCreate (l_int32 n)
 
BOXAboxaCopy (BOXA *boxa, l_int32 copyflag)
 
void boxaDestroy (BOXA **pboxa)
 
l_ok boxaAddBox (BOXA *boxa, BOX *box, l_int32 copyflag)
 
l_ok boxaExtendArray (BOXA *boxa)
 
l_ok boxaExtendArrayToSize (BOXA *boxa, size_t size)
 
l_int32 boxaGetCount (BOXA *boxa)
 
l_int32 boxaGetValidCount (BOXA *boxa)
 
BOXboxaGetBox (BOXA *boxa, l_int32 index, l_int32 accessflag)
 
BOXboxaGetValidBox (BOXA *boxa, l_int32 index, l_int32 accessflag)
 
NUMAboxaFindInvalidBoxes (BOXA *boxa)
 
l_ok boxaGetBoxGeometry (BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
 
l_ok boxaIsFull (BOXA *boxa, l_int32 *pfull)
 
l_ok boxaReplaceBox (BOXA *boxa, l_int32 index, BOX *box)
 
l_ok boxaInsertBox (BOXA *boxa, l_int32 index, BOX *box)
 
l_ok boxaRemoveBox (BOXA *boxa, l_int32 index)
 
l_ok boxaRemoveBoxAndSave (BOXA *boxa, l_int32 index, BOX **pbox)
 
BOXAboxaSaveValid (BOXA *boxas, l_int32 copyflag)
 
l_ok boxaInitFull (BOXA *boxa, BOX *box)
 
l_ok boxaClear (BOXA *boxa)
 
BOXAAboxaaCreate (l_int32 n)
 
BOXAAboxaaCopy (BOXAA *baas, l_int32 copyflag)
 
void boxaaDestroy (BOXAA **pbaa)
 
l_ok boxaaAddBoxa (BOXAA *baa, BOXA *ba, l_int32 copyflag)
 
l_ok boxaaExtendArray (BOXAA *baa)
 
l_ok boxaaExtendArrayToSize (BOXAA *baa, l_int32 size)
 
l_int32 boxaaGetCount (BOXAA *baa)
 
l_int32 boxaaGetBoxCount (BOXAA *baa)
 
BOXAboxaaGetBoxa (BOXAA *baa, l_int32 index, l_int32 accessflag)
 
BOXboxaaGetBox (BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag)
 
l_ok boxaaInitFull (BOXAA *baa, BOXA *boxa)
 
l_ok boxaaExtendWithInit (BOXAA *baa, l_int32 maxindex, BOXA *boxa)
 
l_ok boxaaReplaceBoxa (BOXAA *baa, l_int32 index, BOXA *boxa)
 
l_ok boxaaInsertBoxa (BOXAA *baa, l_int32 index, BOXA *boxa)
 
l_ok boxaaRemoveBoxa (BOXAA *baa, l_int32 index)
 
l_ok boxaaAddBox (BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag)
 
BOXAAboxaaReadFromFiles (const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
 
BOXAAboxaaRead (const char *filename)
 
BOXAAboxaaReadStream (FILE *fp)
 
BOXAAboxaaReadMem (const l_uint8 *data, size_t size)
 
l_ok boxaaWrite (const char *filename, BOXAA *baa)
 
l_ok boxaaWriteStream (FILE *fp, BOXAA *baa)
 
l_ok boxaaWriteMem (l_uint8 **pdata, size_t *psize, BOXAA *baa)
 
BOXAboxaRead (const char *filename)
 
BOXAboxaReadStream (FILE *fp)
 
BOXAboxaReadMem (const l_uint8 *data, size_t size)
 
l_ok boxaWriteDebug (const char *filename, BOXA *boxa)
 
l_ok boxaWrite (const char *filename, BOXA *boxa)
 
l_ok boxaWriteStream (FILE *fp, BOXA *boxa)
 
l_ok boxaWriteStderr (BOXA *boxa)
 
l_ok boxaWriteMem (l_uint8 **pdata, size_t *psize, BOXA *boxa)
 
l_ok boxPrintStreamInfo (FILE *fp, BOX *box)
 

Variables

static const size_t MaxBoxaPtrArraySize = 10000000
 
static const size_t MaxBoxaaPtrArraySize = 1000000
 
static const size_t InitialPtrArraySize = 20
 

Detailed Description

  Basic 'class' functions for box, boxa and boxaa,
  including accessors and serialization.
     Box creation, copy, clone, destruction
          BOX      *boxCreate()
          BOX      *boxCreateValid()
          BOX      *boxCopy()
          BOX      *boxClone()
          void      boxDestroy()
     Box accessors
          l_int32   boxGetGeometry()
          l_int32   boxSetGeometry()
          l_int32   boxGetSideLocations()
          l_int32   boxSetSideLocations()
          l_int32   boxGetRefcount()
          l_int32   boxChangeRefcount()
          l_int32   boxIsValid()
     Boxa creation, copy, destruction
          BOXA     *boxaCreate()
          BOXA     *boxaCopy()
          void      boxaDestroy()
     Boxa array extension
          l_int32   boxaAddBox()
          l_int32   boxaExtendArray()
          l_int32   boxaExtendArrayToSize()
     Boxa accessors
          l_int32   boxaGetCount()
          l_int32   boxaGetValidCount()
          BOX      *boxaGetBox()
          BOX      *boxaGetValidBox()
          NUMA     *boxaFindInvalidBoxes()
          l_int32   boxaGetBoxGeometry()
          l_int32   boxaIsFull()
     Boxa array modifiers
          l_int32   boxaReplaceBox()
          l_int32   boxaInsertBox()
          l_int32   boxaRemoveBox()
          l_int32   boxaRemoveBoxAndSave()
          BOXA     *boxaSaveValid()
          l_int32   boxaInitFull()
          l_int32   boxaClear()
     Boxaa creation, copy, destruction
          BOXAA    *boxaaCreate()
          BOXAA    *boxaaCopy()
          void      boxaaDestroy()
     Boxaa array extension
          l_int32   boxaaAddBoxa()
          l_int32   boxaaExtendArray()
          l_int32   boxaaExtendArrayToSize()
     Boxaa accessors
          l_int32   boxaaGetCount()
          l_int32   boxaaGetBoxCount()
          BOXA     *boxaaGetBoxa()
          BOX      *boxaaGetBox()
     Boxaa array modifiers
          l_int32   boxaaInitFull()
          l_int32   boxaaExtendWithInit()
          l_int32   boxaaReplaceBoxa()
          l_int32   boxaaInsertBoxa()
          l_int32   boxaaRemoveBoxa()
          l_int32   boxaaAddBox()
     Boxaa serialized I/O
          BOXAA    *boxaaReadFromFiles()
          BOXAA    *boxaaRead()
          BOXAA    *boxaaReadStream()
          BOXAA    *boxaaReadMem()
          l_int32   boxaaWrite()
          l_int32   boxaaWriteStream()
          l_int32   boxaaWriteMem()
     Boxa serialized I/O
          BOXA     *boxaRead()
          BOXA     *boxaReadStream()
          BOXA     *boxaReadMem()
          l_int32   boxaWriteDebug()
          l_int32   boxaWrite()
          l_int32   boxaWriteStream()
          l_int32   boxaWriteStderr()
          l_int32   boxaWriteMem()
     Box print (for debug)
          l_int32   boxPrintStreamInfo()
  Most functions use only valid boxes, which are boxes that have both
  width and height > 0.  However, a few functions, such as
  boxaGetMedianVals() do not assume that all boxes are valid.  For any
  function that can use a boxa with invalid boxes, it is convenient
  to use these accessors:
      boxaGetValidCount()   :  count of valid boxes
      boxaGetValidBox()     :  returns NULL for invalid boxes

Definition in file boxbasic.c.

Function Documentation

◆ boxaaAddBox()

l_ok boxaaAddBox ( BOXAA baa,
l_int32  index,
BOX box,
l_int32  accessflag 
)

boxaaAddBox()

Parameters
[in]baa
[in]indexof boxa with boxaa
[in]boxto be added
[in]accessflagL_INSERT, L_COPY or L_CLONE
Returns
0 if OK, 1 on error
Notes:
     (1) Adds to an existing boxa only.

Definition at line 1796 of file boxbasic.c.

References boxaAddBox(), boxaaGetBoxa(), boxaaGetCount(), boxaDestroy(), L_CLONE, L_COPY, and L_INSERT.

Referenced by boxaSort2d().

◆ boxaaAddBoxa()

l_ok boxaaAddBoxa ( BOXAA baa,
BOXA ba,
l_int32  copyflag 
)

◆ boxaaCopy()

BOXAA* boxaaCopy ( BOXAA baas,
l_int32  copyflag 
)

boxaaCopy()

Parameters
[in]baasinput boxaa to be copied
[in]copyflagL_COPY, L_CLONE
Returns
baad new boxaa, composed of copies or clones of the boxa in baas, or NULL on error
Notes:
     (1) L_COPY makes a copy of each boxa in baas.
         L_CLONE makes a clone of each boxa in baas.

Definition at line 1279 of file boxbasic.c.

References boxaaAddBoxa(), boxaaCreate(), boxaaGetBoxa(), boxaaGetCount(), L_CLONE, L_COPY, and L_INSERT.

◆ boxaaCreate()

BOXAA* boxaaCreate ( l_int32  n)

boxaaCreate()

Parameters
[in]nsize of boxa ptr array to be alloc'd; 0 for default
Returns
baa, or NULL on error

Definition at line 1244 of file boxbasic.c.

Referenced by boxaaCopy(), boxaaQuadtreeRegions(), boxaaReadFromFiles(), boxaaSelectRange(), boxaaTranspose(), boxaEncapsulateAligned(), boxaSort2d(), boxaSort2dByIndex(), convertNumberedMasksToBoxaa(), and recogExtractNumbers().

◆ boxaAddBox()

◆ boxaaDestroy()

void boxaaDestroy ( BOXAA **  pbaa)

boxaaDestroy()

Parameters
[in,out]pbaawill be set to null before returning

Definition at line 1310 of file boxbasic.c.

References Boxaa::boxa, boxaDestroy(), and Boxaa::n.

Referenced by boxaSort2d(), pixGetWordBoxesInTextlines(), pixGetWordsInTextlines(), and recogExtractNumbers().

◆ boxaaExtendArray()

l_ok boxaaExtendArray ( BOXAA baa)

boxaaExtendArray()

Parameters
[in]baa
Returns
0 if OK, 1 on error
Notes:
     (1) Doubles the size of the boxa ptr array.
     (2) The max number of boxa ptrs is 1 million.

Definition at line 1391 of file boxbasic.c.

References boxaaExtendArrayToSize(), and Boxaa::nalloc.

Referenced by boxaaAddBoxa(), and boxaaInsertBoxa().

◆ boxaaExtendArrayToSize()

l_ok boxaaExtendArrayToSize ( BOXAA baa,
l_int32  size 
)

boxaaExtendArrayToSize()

Parameters
[in]baa
[in]sizenew size of boxa array
Returns
0 if OK; 1 on error
Notes:
     (1) If necessary, reallocs the boxa ptr array to size.
     (2) size limited to 1M boxa ptrs.

Definition at line 1416 of file boxbasic.c.

References Boxaa::nalloc.

Referenced by boxaaExtendArray(), and boxaaExtendWithInit().

◆ boxaaExtendWithInit()

l_ok boxaaExtendWithInit ( BOXAA baa,
l_int32  maxindex,
BOXA boxa 
)

boxaaExtendWithInit()

Parameters
[in]baa
[in]maxindex
[in]boxato be replicated into the extended ptr array
Returns
0 if OK, 1 on error
Notes:
     (1) This should be used on an existing boxaa that has been
         fully loaded with boxa.  It then extends the boxaa,
         loading all the additional ptrs with copies of boxa.
         Typically, boxa will be empty.

Definition at line 1623 of file boxbasic.c.

References boxaaAddBoxa(), boxaaExtendArrayToSize(), boxaaGetCount(), and L_COPY.

Referenced by convertSegmentedFilesToPdf().

◆ boxaaGetBox()

BOX* boxaaGetBox ( BOXAA baa,
l_int32  iboxa,
l_int32  ibox,
l_int32  accessflag 
)

boxaaGetBox()

Parameters
[in]baa
[in]iboxaindex into the boxa array in the boxaa
[in]iboxindex into the box array in the boxa
[in]accessflagL_COPY or L_CLONE
Returns
box, or NULL on error

Definition at line 1531 of file boxbasic.c.

References boxaaGetBoxa(), boxaDestroy(), boxaGetBox(), and L_CLONE.

Referenced by boxaaTranspose().

◆ boxaaGetBoxa()

BOXA* boxaaGetBoxa ( BOXAA baa,
l_int32  index,
l_int32  accessflag 
)

◆ boxaaGetBoxCount()

l_int32 boxaaGetBoxCount ( BOXAA baa)

boxaaGetBoxCount()

Parameters
[in]baa
Returns
count number of boxes, or 0 if no boxes or on error

Definition at line 1471 of file boxbasic.c.

References boxaaGetBoxa(), boxaaGetCount(), boxaDestroy(), boxaGetCount(), and L_CLONE.

◆ boxaaGetCount()

◆ boxaaInitFull()

l_ok boxaaInitFull ( BOXAA baa,
BOXA boxa 
)

boxaaInitFull()

Parameters
[in]baatypically empty
[in]boxato be replicated into the entire ptr array
Returns
0 if OK, 1 on error
Notes:
     (1) This initializes a boxaa by filling up the entire boxa ptr array
         with copies of boxa.  Any existing boxa are destroyed.
         After this operation, the number of boxa is equal to
         the number of allocated ptrs.
     (2) Note that we use boxaaReplaceBoxa() which replaces a boxa,
         instead of boxaaInsertBoxa(), which is O(n) and shifts all
         the boxa pointers from the insertion point to the end.
     (3) Example usage.  This function is useful to prepare for a
         random insertion (or replacement) of boxa into a boxaa.
         To randomly insert boxa into a boxaa, up to some index "max":
            Boxaa *baa = boxaaCreate(max);
              // initialize the boxa
            Boxa *boxa = boxaCreate(...);
            ...  [optionally fill with boxes]
            boxaaInitFull(baa, boxa);
         A typical use is to initialize the array with empty boxa,
         and to replace only a subset that must be aligned with
         something else, such as a pixa.

Definition at line 1583 of file boxbasic.c.

References boxaaReplaceBoxa(), boxaCopy(), L_COPY, Boxaa::n, and Boxaa::nalloc.

Referenced by convertNumberedMasksToBoxaa().

◆ boxaaInsertBoxa()

l_ok boxaaInsertBoxa ( BOXAA baa,
l_int32  index,
BOXA boxa 
)

boxaaInsertBoxa()

Parameters
[in]baa
[in]indexlocation in boxaa to insert new boxa
[in]boxanew boxa to be inserted
Returns
0 if OK, 1 on error
Notes:
     (1) This shifts boxa[i] --> boxa[i + 1] for all i >= index,
         and then inserts boxa as boxa[index].  It is typically used
         when baa is full of boxa.
     (2) To insert at the beginning of the array, set index = 0.
     (3) To append to the array, it is equivalent to boxaaAddBoxa().
     (4) This should not be used repeatedly to insert into large arrays,
         because the function is O(n).

Definition at line 1707 of file boxbasic.c.

References Boxaa::boxa, boxaaExtendArray(), boxaaGetCount(), Boxaa::n, and Boxaa::nalloc.

◆ boxaaRead()

BOXAA* boxaaRead ( const char *  filename)

boxaaRead()

Parameters
[in]filename
Returns
boxaa, or NULL on error

Definition at line 1888 of file boxbasic.c.

References boxaaReadStream(), and fopenReadStream().

◆ boxaaReadFromFiles()

BOXAA* boxaaReadFromFiles ( const char *  dirname,
const char *  substr,
l_int32  first,
l_int32  nfiles 
)

boxaaReadFromFiles()

Parameters
[in]dirnamedirectory
[in]substr[optional] substring filter on filenames; can be NULL
[in]first0-based
[in]nfilesuse 0 for everything from first to the end
Returns
baa, or NULL on error or if no boxa files are found.
Notes:
     (1) The files must be serialized boxa files (e.g., *.ba).
         If some files cannot be read, warnings are issued.
     (2) Use substr to filter filenames in the directory.  If
         substr == NULL, this takes all files.
     (3) After filtering, use first and nfiles to select
         a contiguous set of files, that have been lexically
         sorted in increasing order.

Definition at line 1844 of file boxbasic.c.

References boxaaAddBoxa(), boxaaCreate(), boxaRead(), getSortedPathnamesInDirectory(), L_INSERT, L_NOCOPY, sarrayDestroy(), sarrayGetCount(), and sarrayGetString().

◆ boxaaReadMem()

BOXAA* boxaaReadMem ( const l_uint8 *  data,
size_t  size 
)

boxaaReadMem()

Parameters
[in]dataserialization of boxaa; in ascii
[in]sizeof data in bytes; can use strlen to get it
Returns
baa, or NULL on error

Definition at line 1970 of file boxbasic.c.

References boxaaReadStream(), and fopenReadFromMemory().

◆ boxaaReadStream()

BOXAA* boxaaReadStream ( FILE *  fp)

boxaaReadStream()

Parameters
[in]fpinput file stream
Returns
boxaa, or NULL on error
Notes:
     (1) It is OK for the boxaa to be empty (n == 0).

Definition at line 1920 of file boxbasic.c.

References BOXAA_VERSION_NUMBER.

Referenced by boxaaRead(), and boxaaReadMem().

◆ boxaaRemoveBoxa()

l_ok boxaaRemoveBoxa ( BOXAA baa,
l_int32  index 
)

boxaaRemoveBoxa()

Parameters
[in]baa
[in]indexof the boxa to be removed and destroyed
Returns
0 if OK, 1 on error
Notes:
     (1) This removes boxa[index] and then shifts
         boxa[i] --> boxa[i - 1] for all i > index.
     (2) The removed boxaa is destroyed.
     (2) This should not be used repeatedly on large arrays,
         because the function is O(n).

Definition at line 1756 of file boxbasic.c.

References Boxaa::boxa, boxaaGetCount(), boxaDestroy(), and Boxaa::n.

◆ boxaaReplaceBoxa()

l_ok boxaaReplaceBoxa ( BOXAA baa,
l_int32  index,
BOXA boxa 
)

boxaaReplaceBoxa()

Parameters
[in]baa
[in]indexto the index-th boxa
[in]boxainsert and replace any existing one
Returns
0 if OK, 1 on error
Notes:
     (1) Any existing boxa is destroyed, and the input one
         is inserted in its place.
     (2) If the index is invalid, return 1 (error)

Definition at line 1665 of file boxbasic.c.

References Boxaa::boxa, boxaaGetCount(), and boxaDestroy().

Referenced by boxaaInitFull(), boxaSort2d(), and convertNumberedMasksToBoxaa().

◆ boxaaWrite()

l_ok boxaaWrite ( const char *  filename,
BOXAA baa 
)

boxaaWrite()

Parameters
[in]filename
[in]baa
Returns
0 if OK, 1 on error

Definition at line 1998 of file boxbasic.c.

References boxaaWriteStream(), and fopenWriteStream().

◆ boxaaWriteMem()

l_ok boxaaWriteMem ( l_uint8 **  pdata,
size_t *  psize,
BOXAA baa 
)

boxaaWriteMem()

Parameters
[out]pdatadata of serialized boxaa; ascii
[out]psizesize of returned data
[in]baa
Returns
0 if OK, 1 on error
Notes:
     (1) Serializes a boxaa in memory and puts the result in a buffer.

Definition at line 2076 of file boxbasic.c.

References boxaaWriteStream(), fopenWriteWinTempfile(), and l_binaryReadStream().

◆ boxaaWriteStream()

l_ok boxaaWriteStream ( FILE *  fp,
BOXAA baa 
)

boxaaWriteStream()

Parameters
[in]fpoutput file stream
[in]baa
Returns
0 if OK, 1 on error

Definition at line 2029 of file boxbasic.c.

References BOXAA_VERSION_NUMBER, boxaaGetBoxa(), boxaaGetCount(), boxaDestroy(), boxaGetExtent(), boxaWriteStream(), boxDestroy(), boxGetGeometry(), and L_CLONE.

Referenced by boxaaWrite(), and boxaaWriteMem().

◆ boxaClear()

l_ok boxaClear ( BOXA boxa)

boxaClear()

Parameters
[in]boxa
Returns
0 if OK, 1 on error
Notes:
     (1) This destroys all boxes in the boxa, setting the ptrs
         to null.  The number of allocated boxes, n, is set to 0.

Definition at line 1217 of file boxbasic.c.

References Boxa::box, boxaGetCount(), boxDestroy(), and Boxa::n.

Referenced by pixaClear().

◆ boxaCopy()

◆ boxaCreate()

◆ boxaDestroy()

void boxaDestroy ( BOXA **  pboxa)

boxaDestroy()

Parameters
[in,out]pboxawill be set to null before returning
Returns
void
Notes:
     (1) Decrements the ref count and, if 0, destroys the boxa.
     (2) Always nulls the input ptr.

Definition at line 583 of file boxbasic.c.

References Boxa::box, boxDestroy(), Boxa::n, and Boxa::refcount.

Referenced by boxaaAddBox(), boxaaAlignBox(), boxaaDestroy(), boxaaFlattenAligned(), boxaaFlattenToBoxa(), boxaaGetBox(), boxaaGetBoxCount(), boxaaGetExtent(), boxaaRemoveBoxa(), boxaaReplaceBoxa(), boxaaSizeRange(), boxaaTranspose(), boxaaWriteStream(), boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxaCompareRegions(), boxaDisplayTiled(), boxaFillSequence(), boxaHandleOverlaps(), boxaMedianDimensions(), boxaPlotSides(), boxaPlotSizes(), boxaReconcilePairWidth(), boxaReconcileSidesByMedian(), boxaReconcileSizeByMedian(), boxaRotateOrth(), boxaSelectLargeULBox(), boxaSizeVariation(), boxaSort2d(), boxaTransform(), boxaTransformOrdered(), ccbDestroy(), convertNumberedMasksToBoxaa(), convertSegmentedFilesToPdf(), evalColorfillData(), generatePtaGrid(), l_colorfillDestroy(), partelDestroy(), pixaAddBorderGeneral(), pixaaDestroy(), pixaaDisplay(), pixacompDestroy(), pixacompJoin(), pixaCreateFromPixacomp(), pixaDestroy(), pixaDisplay(), pixaDisplayBoxaa(), pixaDisplayRandomCmap(), pixaEqual(), pixaIsFull(), pixaJoin(), pixaSetBoxa(), pixaTranslate(), pixAutoPhotoinvert(), pixGetWordBoxesInTextlines(), pixGetWordsInTextlines(), pixMorphSequenceByComponent(), pixSelectByArea(), pixSelectByAreaFraction(), pixSelectByPerimSizeRatio(), pixSelectByPerimToAreaRatio(), pixSelectBySize(), pixSelectByWidthHeightRatio(), pixSelectLargeULComp(), recogDestroyDid(), and showExtractNumbers().

◆ boxaExtendArray()

l_ok boxaExtendArray ( BOXA boxa)

boxaExtendArray()

Parameters
[in]boxa
Returns
0 if OK; 1 on error
Notes:
     (1) Reallocs with doubled size of ptr array.

Definition at line 671 of file boxbasic.c.

References boxaExtendArrayToSize(), and Boxa::nalloc.

Referenced by boxaAddBox(), boxaInsertBox(), and pixaInsertPix().

◆ boxaExtendArrayToSize()

l_ok boxaExtendArrayToSize ( BOXA boxa,
size_t  size 
)

boxaExtendArrayToSize()

Parameters
[in]boxa
[in]sizenew size of boxa ptr array
Returns
0 if OK; 1 on error
Notes:
     (1) If necessary, reallocs new boxa ptr array to size.
     (2) The max number of box ptrs is 10M.

Definition at line 696 of file boxbasic.c.

References Boxa::nalloc.

Referenced by boxaExtendArray().

◆ boxaFindInvalidBoxes()

NUMA* boxaFindInvalidBoxes ( BOXA boxa)

boxaFindInvalidBoxes()

Parameters
[in]boxa
Returns
na numa of invalid boxes; NULL if there are none or on error

Definition at line 846 of file boxbasic.c.

References boxaGetBoxGeometry(), boxaGetCount(), boxaGetValidCount(), numaMakeConstant(), and numaSetValue().

◆ boxaGetBox()

◆ boxaGetBoxGeometry()

◆ boxaGetCount()

l_int32 boxaGetCount ( BOXA boxa)

boxaGetCount()

Parameters
[in]boxa
Returns
count of all boxes; 0 if no boxes or on error

Definition at line 734 of file boxbasic.c.

References Boxa::n.

Referenced by boxaaAlignBox(), boxaAddBox(), boxaAdjustHeightToTarget(), boxaAdjustSides(), boxaAdjustWidthToTarget(), boxaaFlattenAligned(), boxaaFlattenToBoxa(), boxaaGetBoxCount(), boxaaTranspose(), boxaBinSort(), boxaClear(), boxaClipToBox(), boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxaCompareRegions(), boxaContainedInBox(), boxaContainedInBoxa(), boxaContainedInBoxCount(), boxaConvertToPta(), boxaDisplayTiled(), boxaEncapsulateAligned(), boxaEqual(), boxaExtractAsNuma(), boxaExtractAsPta(), boxaExtractCorners(), boxaExtractSortedPattern(), boxaFillAll(), boxaFillSequence(), boxaFindInvalidBoxes(), boxaFindNearestBoxes(), boxaGetArea(), boxaGetAverageSize(), boxaGetCoverage(), boxaGetExtent(), boxaGetNearestByDirection(), boxaGetNearestToLine(), boxaGetNearestToPt(), boxaGetValidCount(), boxaHandleOverlaps(), boxaInsertBox(), boxaIntersectsBox(), boxaIntersectsBoxCount(), boxaIsFull(), boxaJoin(), boxaLocationRange(), boxaMakeAreaIndicator(), boxaMakeSizeIndicator(), boxaMakeWHRatioIndicator(), boxaMedianDimensions(), boxaMergeEvenOdd(), boxaModifyWithBoxa(), boxaPermutePseudorandom(), boxaPermuteRandom(), boxaPlotSides(), boxaPlotSizes(), boxaPruneSortedOnOverlap(), boxaReconcilePairWidth(), boxaReconcileSizeByMedian(), boxaRemoveBoxAndSave(), boxaRotateOrth(), boxaSaveValid(), boxaSelectByArea(), boxaSelectBySize(), boxaSelectByWHRatio(), boxaSelectLargeULBox(), boxaSelectPivotBox(), boxaSelectRange(), boxaSetSide(), boxaShiftWithPta(), boxaSimilar(), boxaSizeConsistency(), boxaSizeRange(), boxaSizeVariation(), boxaSmoothSequenceMedian(), boxaSort(), boxaSort2d(), boxaSort2dByIndex(), boxaSortByIndex(), boxaSplitEvenOdd(), boxaSwapBoxes(), boxaTransform(), boxaTransformOrdered(), boxaWindowedMedian(), boxaWriteStderr(), boxaWriteStream(), boxCheckIfOverlapIsBig(), convertSegmentedFilesToPdf(), generatePtaaBoxa(), generatePtaaHashBoxa(), generatePtaBoxa(), generatePtaHashBoxa(), pixaaDisplay(), pixaBinSort(), pixacompGetBoxaCount(), pixaCreateFromBoxa(), pixaDisplayBoxaa(), pixaEqual(), pixaGetBoxaCount(), pixaRemovePix(), pixaRemovePixAndSave(), pixaSort(), pixAutoPhotoinvert(), pixBlendBoxaRandom(), pixClipRectangles(), pixCopyWithBoxa(), pixDrawBoxa(), pixDrawBoxaRandom(), pixPaintBoxa(), pixPaintBoxaRandom(), pixSelectLargeULComp(), and pixSetBlackOrWhiteBoxa().

◆ boxaGetValidBox()

BOX* boxaGetValidBox ( BOXA boxa,
l_int32  index,
l_int32  accessflag 
)

boxaGetValidBox()

Parameters
[in]boxa
[in]indexto the index-th box
[in]accessflagL_COPY or L_CLONE
Returns
box, or NULL if box is not valid or on error
Notes:
     (1) This returns NULL for an invalid box in a boxa.
         For a box to be valid, both the width and height must be > 0.
     (2) We allow invalid boxes, with w = 0 or h = 0, as placeholders
         in boxa for which the index of the box in the boxa is important.
         This is an atypical situation; usually you want to put only
         valid boxes in a boxa.

Definition at line 818 of file boxbasic.c.

References boxaGetBox(), boxDestroy(), and boxGetGeometry().

Referenced by boxaAdjustHeightToTarget(), boxaAdjustWidthToTarget(), boxaClipToBox(), boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxaContainedInBox(), boxaContainedInBoxa(), boxaContainedInBoxCount(), boxaFillAll(), boxaGetNearestToLine(), boxaGetNearestToPt(), boxaGetSizes(), boxaHandleOverlaps(), boxaIntersectsBox(), boxaIntersectsBoxCount(), boxaModifyWithBoxa(), boxaReconcileSizeByMedian(), and boxaSaveValid().

◆ boxaGetValidCount()

◆ boxaInitFull()

l_ok boxaInitFull ( BOXA boxa,
BOX box 
)

boxaInitFull()

Parameters
[in]boxatypically empty
[in]box[optional] to be replicated into the entire ptr array
Returns
0 if OK, 1 on error
Notes:
     (1) This initializes a boxa by filling up the entire box ptr array
         with copies of box.  If box == NULL, use a placeholder box
         of zero size.  Any existing boxes are destroyed.
         After this opepration, the number of boxes is equal to
         the number of allocated ptrs.
     (2) Note that we use boxaReplaceBox() instead of boxaInsertBox().
         They both have the same effect when inserting into a NULL ptr
         in the boxa ptr array:
     (3) Example usage.  This function is useful to prepare for a
         random insertion (or replacement) of boxes into a boxa.
         To randomly insert boxes into a boxa, up to some index "max":
            Boxa *boxa = boxaCreate(max);
            boxaInitFull(boxa, NULL);
         If you want placeholder boxes of non-zero size:
            Boxa *boxa = boxaCreate(max);
            Box *box = boxCreate(...);
            boxaInitFull(boxa, box);
            boxDestroy(&box);
         If we have an existing boxa with a smaller ptr array, it can
         be reused for up to max boxes:
            boxaExtendArrayToSize(boxa, max);
            boxaInitFull(boxa, NULL);
         The initialization allows the boxa to always be properly
         filled, even if all the boxes are not later replaced.
         If you want to know which boxes have been replaced,
         and you initialized with invalid zero-sized boxes,
         use boxaGetValidBox() to return NULL for the invalid boxes.

Definition at line 1180 of file boxbasic.c.

References boxaReplaceBox(), boxCopy(), boxCreate(), Boxa::n, and Boxa::nalloc.

Referenced by pixaInitFull().

◆ boxaInsertBox()

l_ok boxaInsertBox ( BOXA boxa,
l_int32  index,
BOX box 
)

boxaInsertBox()

Parameters
[in]boxa
[in]indexlocation in boxa to insert new value
[in]boxnew box to be inserted; the boxa now owns it
Returns
0 if OK, 1 on error
Notes:
     (1) This shifts box[i] --> box[i + 1] for all i >= index,
         and then inserts box as box[index].
     (2) To insert at the beginning of the array, set index = 0.
     (3) To append to the array, it's easier to use boxaAddBox().
     (4) This should not be used repeatedly to insert into large arrays,
         because the function is O(n).

Definition at line 1000 of file boxbasic.c.

References Boxa::box, boxaExtendArray(), boxaGetCount(), Boxa::n, and Boxa::nalloc.

Referenced by pixaInsertPix().

◆ boxaIsFull()

l_ok boxaIsFull ( BOXA boxa,
l_int32 *  pfull 
)

boxaIsFull()

Parameters
[in]boxa
[out]pfull1 if boxa is full; 0 otherwise
Returns
0 if OK, 1 on error

Definition at line 915 of file boxbasic.c.

References boxaGetBox(), boxaGetCount(), boxDestroy(), and L_CLONE.

Referenced by boxaShiftWithPta(), and pixaIsFull().

◆ boxaRead()

BOXA* boxaRead ( const char *  filename)

boxaRead()

Parameters
[in]filename
Returns
boxa, or NULL on error

Definition at line 2129 of file boxbasic.c.

References boxaReadStream(), and fopenReadStream().

Referenced by boxaaReadFromFiles().

◆ boxaReadMem()

BOXA* boxaReadMem ( const l_uint8 *  data,
size_t  size 
)

boxaReadMem()

Parameters
[in]dataserialization of boxa; in ascii
[in]sizeof data in bytes; can use strlen to get it
Returns
boxa, or NULL on error

Definition at line 2208 of file boxbasic.c.

References boxaReadStream(), and fopenReadFromMemory().

◆ boxaReadStream()

BOXA* boxaReadStream ( FILE *  fp)

boxaReadStream()

Parameters
[in]fpinput file stream
Returns
boxa, or NULL on error
Notes:
     (1) It is OK for the boxa to be empty (n == 0).

Definition at line 2161 of file boxbasic.c.

References BOXA_VERSION_NUMBER.

Referenced by boxaRead(), and boxaReadMem().

◆ boxaRemoveBox()

l_ok boxaRemoveBox ( BOXA boxa,
l_int32  index 
)

boxaRemoveBox()

Parameters
[in]boxa
[in]indexof box to be removed and destroyed
Returns
0 if OK, 1 on error
Notes:
     (1) This removes box[index] and then shifts
         box[i] --> box[i - 1] for all i > index.
     (2) It should not be used repeatedly to remove boxes from
         large arrays, because the function is O(n).

Definition at line 1048 of file boxbasic.c.

References boxaRemoveBoxAndSave().

Referenced by pixaRemovePix().

◆ boxaRemoveBoxAndSave()

l_ok boxaRemoveBoxAndSave ( BOXA boxa,
l_int32  index,
BOX **  pbox 
)

boxaRemoveBoxAndSave()

Parameters
[in]boxa
[in]indexof box to be removed
[out]pbox[optional] removed box
Returns
0 if OK, 1 on error
Notes:
     (1) This removes box[index] and then shifts
         box[i] --> box[i - 1] for all i > index.
     (2) It should not be used repeatedly to remove boxes from
         large arrays, because the function is O(n).

Definition at line 1072 of file boxbasic.c.

References Boxa::box, boxaGetBox(), boxaGetCount(), boxDestroy(), L_CLONE, and Boxa::n.

Referenced by boxaRemoveBox(), and pixaRemovePixAndSave().

◆ boxaReplaceBox()

l_ok boxaReplaceBox ( BOXA boxa,
l_int32  index,
BOX box 
)

boxaReplaceBox()

Parameters
[in]boxa
[in]indexto the index-th box
[in]boxinsert this box to replace existing one
Returns
0 if OK, 1 on error
Notes:
     (1) In-place replacement of one box; the input box is now
         owned by the boxa.
     (2) The previous box at that location, if any, is destroyed.

Definition at line 962 of file boxbasic.c.

References Boxa::box, boxDestroy(), and Boxa::n.

Referenced by boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxaFillAll(), boxaHandleOverlaps(), boxaInitFull(), pixaAddBorderGeneral(), and pixaReplacePix().

◆ boxaSaveValid()

BOXA* boxaSaveValid ( BOXA boxas,
l_int32  copyflag 
)

boxaSaveValid()

Parameters
[in]boxas
[in]copyflagL_COPY or L_CLONE
Returns
boxad if OK, NULL on error
Notes:
     (1) This makes a copy/clone of each valid box.

Definition at line 1116 of file boxbasic.c.

References boxaAddBox(), boxaCreate(), boxaGetCount(), boxaGetValidBox(), L_CLONE, L_COPY, and L_INSERT.

Referenced by boxaCombineOverlaps(), boxaCombineOverlapsInPair(), and boxaDisplayTiled().

◆ boxaWrite()

l_ok boxaWrite ( const char *  filename,
BOXA boxa 
)

boxaWrite()

Parameters
[in]filename
[in]boxa
Returns
0 if OK, 1 on error

Definition at line 2267 of file boxbasic.c.

References boxaWriteStream(), and fopenWriteStream().

Referenced by boxaWriteDebug().

◆ boxaWriteDebug()

l_ok boxaWriteDebug ( const char *  filename,
BOXA boxa 
)

boxaWriteDebug()

Parameters
[in]filename
[in]boxa
Returns
0 if OK; 1 on error
Notes:
     (1) Debug version, intended for use in the library when writing
         to files in a temp directory with names that are compiled in.
         This is used instead of boxaWrite() for all such library calls.
     (2) The global variable LeptDebugOK defaults to 0, and can be set
         or cleared by the function setLeptDebugOK().

Definition at line 2245 of file boxbasic.c.

References boxaWrite().

Referenced by boxaSmoothSequenceMedian().

◆ boxaWriteMem()

l_ok boxaWriteMem ( l_uint8 **  pdata,
size_t *  psize,
BOXA boxa 
)

boxaWriteMem()

Parameters
[out]pdatadata of serialized boxa; ascii
[out]psizesize of returned data
[in]boxa
Returns
0 if OK, 1 on error
Notes:
     (1) Serializes a boxa in memory and puts the result in a buffer.

Definition at line 2371 of file boxbasic.c.

References boxaWriteStream(), fopenWriteWinTempfile(), and l_binaryReadStream().

◆ boxaWriteStderr()

l_ok boxaWriteStderr ( BOXA boxa)

boxaWriteStderr()

Parameters
[in]boxa
Returns
0 if OK, 1 on error

Definition at line 2333 of file boxbasic.c.

References BOXA_VERSION_NUMBER, boxaGetBox(), boxaGetCount(), boxDestroy(), Box::h, L_CLONE, lept_stderr(), Box::w, Box::x, and Box::y.

Referenced by boxaWriteStream().

◆ boxaWriteStream()

l_ok boxaWriteStream ( FILE *  fp,
BOXA boxa 
)

boxaWriteStream()

Parameters
[in]fpfile stream; use NULL for stderr
[in]boxa
Returns
0 if OK, 1 on error

Definition at line 2299 of file boxbasic.c.

References BOXA_VERSION_NUMBER, boxaGetBox(), boxaGetCount(), boxaWriteStderr(), boxDestroy(), Box::h, L_CLONE, Box::w, Box::x, and Box::y.

Referenced by boxaaWriteStream(), boxaWrite(), boxaWriteMem(), pixaaWriteStream(), pixacompWriteStream(), and pixaWriteStream().

◆ boxChangeRefcount()

l_ok boxChangeRefcount ( BOX box,
l_int32  delta 
)

Adjust the current references count of box by delta.

Parameters
[in]boxptr to box
[in]deltaadjustment, usually -1 or 1
Returns
0 if OK, 1 on error

Definition at line 454 of file boxbasic.c.

References Box::refcount.

Referenced by boxClone(), and boxDestroy().

◆ boxClone()

BOX* boxClone ( BOX box)

boxClone()

Parameters
[in]box
Returns
ptr to same box, or NULL on error

Definition at line 256 of file boxbasic.c.

References boxChangeRefcount().

Referenced by boxaAddBox(), boxaGetBox(), pixacompGetBox(), and pixaGetBox().

◆ boxCopy()

BOX* boxCopy ( BOX box)

◆ boxCreate()

BOX* boxCreate ( l_int32  x,
l_int32  y,
l_int32  w,
l_int32  h 
)

boxCreate()

Parameters
[in]x,y,w,h
Returns
box, or NULL on error
Notes:
     (1) This clips the box to the +quad.  If no part of the
         box is in the +quad, this returns NULL.
     (2) We allow you to make a box with w = 0 and/or h = 0.
         This does not represent a valid region, but it is useful
         as a placeholder in a boxa for which the index of the
         box in the boxa is important.  This is an atypical
         situation; usually you want to put only valid boxes with
         nonzero width and height in a boxa.  If you have a boxa
         with invalid boxes, the accessor boxaGetValidBox()
         will return NULL on each invalid box.
     (3) If you want to create only valid boxes, use boxCreateValid(),
         which returns NULL if either w or h is 0.

Definition at line 172 of file boxbasic.c.

References boxSetGeometry(), and Box::refcount.

Referenced by boxaAdjustSides(), boxaaFlattenAligned(), boxaaFlattenToBoxa(), boxaaGetExtent(), boxaaQuadtreeRegions(), boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxAdjustSides(), boxaGenerateSubboxes(), boxaGetExtent(), boxaInitFull(), boxaModifyWithBoxa(), boxaSplitEvenOdd(), boxaWindowedMedian(), boxBoundingRegion(), boxCopy(), boxCreateValid(), boxOverlapRegion(), boxRotateOrth(), boxTransform(), boxTransformOrdered(), ccbaReadStream(), generatePtaGrid(), ioFormatTest(), makeMosaicStrips(), pixaDisplayTiledByIndex(), pixaSetFullSizeBoxa(), pixClipRectangleWithBorder(), pixCropAlignedToCentroid(), pixPrepare1bpp(), pixTilingGetTile(), pixWarpStereoscopic(), ptaConvertToBox(), ptaConvertToBoxa(), and ptaGetBoundingRegion().

◆ boxCreateValid()

BOX* boxCreateValid ( l_int32  x,
l_int32  y,
l_int32  w,
l_int32  h 
)

boxCreateValid()

Parameters
[in]x,y,w,h
Returns
box, or NULL on error
Notes:
     (1) This returns NULL if either w = 0 or h = 0.

Definition at line 215 of file boxbasic.c.

References boxCreate().

◆ boxDestroy()

void boxDestroy ( BOX **  pbox)

boxDestroy()

Parameters
[in,out]pboxwill be set to null before returning
Returns
void
Notes:
     (1) Decrements the ref count and, if 0, destroys the box.
     (2) Always nulls the input ptr.

Definition at line 282 of file boxbasic.c.

References boxChangeRefcount(), and boxGetRefcount().

Referenced by boxaaAlignBox(), boxaAddBox(), boxaAdjustBoxSides(), boxaAdjustHeightToTarget(), boxaAdjustSides(), boxaAdjustWidthToTarget(), boxaaWriteStream(), boxaClear(), boxaClipToBox(), boxaCombineOverlaps(), boxaCombineOverlapsInPair(), boxaCompareRegions(), boxaContainedInBox(), boxaContainedInBoxa(), boxaContainedInBoxCount(), boxaConvertToPta(), boxaDestroy(), boxaDisplayTiled(), boxaEqual(), boxaExtractSortedPattern(), boxaFillAll(), boxaGenerateSubboxes(), boxaGetBoxGeometry(), boxaGetCoverage(), boxaGetNearestToLine(), boxaGetNearestToPt(), boxaGetSizes(), boxaGetValidBox(), boxaHandleOverlaps(), boxaIntersectsBox(), boxaIntersectsBoxCount(), boxaIsFull(), boxaModifyWithBoxa(), boxaPruneSortedOnOverlap(), boxaReconcilePairWidth(), boxaReconcileSizeByMedian(), boxaRemoveBoxAndSave(), boxaReplaceBox(), boxaRotateOrth(), boxaSelectPivotBox(), boxaSetSide(), boxaShiftWithPta(), boxaSimilar(), boxaTransform(), boxaTransformOrdered(), boxaWriteStderr(), boxaWriteStream(), boxCheckIfOverlapIsBig(), boxClipToRectangleParams(), boxOverlapArea(), boxOverlapFraction(), ccbaDisplayImage1(), dewarpShowResults(), evalColorfillData(), generatePtaaBoxa(), generatePtaaHashBoxa(), generatePtaBoxa(), generatePtaHashBoxa(), ioFormatTest(), partelDestroy(), pixaClipToForeground(), pixacompGetBoxGeometry(), pixaCreateFromBoxa(), pixAddWithIndicator(), pixaDisplayBoxaa(), pixaGetBoxGeometry(), pixaRotateOrth(), pixAutoPhotoinvert(), pixBlendBoxaRandom(), pixClipRectangle(), pixClipRectangles(), pixClipRectangleWithBorder(), pixCompareGrayByHisto(), pixPrepare1bpp(), pixRemoveWithIndicator(), pixTilingGetTile(), recogAverageSamples(), recogExtractNumbers(), recogRescoreDidResult(), selCreateFromPta(), and showExtractNumbers().

◆ boxGetGeometry()

l_ok boxGetGeometry ( BOX box,
l_int32 *  px,
l_int32 *  py,
l_int32 *  pw,
l_int32 *  ph 
)

◆ boxGetRefcount()

l_int32 boxGetRefcount ( BOX box)

Return the current reference count of box.

Parameters
[in]box
Returns
refcount

Definition at line 436 of file boxbasic.c.

References Box::refcount.

Referenced by boxDestroy().

◆ boxGetSideLocations()

l_ok boxGetSideLocations ( BOX box,
l_int32 *  pl,
l_int32 *  pr,
l_int32 *  pt,
l_int32 *  pb 
)

boxGetSideLocations()

Parameters
[in]box
[out]pl,pt,pr,pb[optional] each can be null
Returns
0 if OK, 1 on error
Notes:
     (1) All returned values are within the box.

Definition at line 374 of file boxbasic.c.

References boxGetGeometry().

Referenced by boxaReconcileSizeByMedian(), and boxSimilar().

◆ boxIsValid()

l_ok boxIsValid ( BOX box,
l_int32 *  pvalid 
)

◆ boxPrintStreamInfo()

l_ok boxPrintStreamInfo ( FILE *  fp,
BOX box 
)

boxPrintStreamInfo()

Parameters
[in]fpfile stream; use NULL for stderr
[in]box
Returns
0 if OK, 1 on error
Notes:
     (1) This outputs debug info.  Use serialization functions to
         write to file if you want to read the data back.

Definition at line 2431 of file boxbasic.c.

References Box::h, lept_stderr(), Box::w, Box::x, and Box::y.

◆ boxSetGeometry()

l_ok boxSetGeometry ( BOX box,
l_int32  x,
l_int32  y,
l_int32  w,
l_int32  h 
)

boxSetGeometry()

Parameters
[in]box
[in]x,y,w,h[optional] use -1 to leave unchanged
Returns
0 if OK, 1 on error

Definition at line 343 of file boxbasic.c.

References Box::h, Box::w, Box::x, and Box::y.

Referenced by boxaAdjustHeightToTarget(), boxaAdjustWidthToTarget(), boxAdjustSides(), boxaReconcilePairWidth(), boxCreate(), boxRelocateOneSide(), boxSetSide(), and boxSetSideLocations().

◆ boxSetSideLocations()

l_ok boxSetSideLocations ( BOX box,
l_int32  l,
l_int32  r,
l_int32  t,
l_int32  b 
)

boxSetSideLocations()

Parameters
[in]box
[in]l,r,t,b[optional] use -1 to leave unchanged
Returns
0 if OK, 1 on error

Definition at line 408 of file boxbasic.c.

References boxSetGeometry(), Box::h, Box::w, Box::x, and Box::y.

Variable Documentation

◆ InitialPtrArraySize

const size_t InitialPtrArraySize = 20
static

n'importe quoi

Definition at line 144 of file boxbasic.c.