Class WhiteRectangleDetector

java.lang.Object
com.google.zxing.common.detector.WhiteRectangleDetector

public final class WhiteRectangleDetector extends Object

Detects a candidate barcode-like rectangular region within an image. It starts around the center of the image, increases the size of the candidate region until it finds a white rectangular region. By keeping track of the last black points it encountered, it determines the corners of the barcode.

  • Field Details

    • INIT_SIZE

      private static final int INIT_SIZE
      See Also:
    • CORR

      private static final int CORR
      See Also:
    • image

      private final BitMatrix image
    • height

      private final int height
    • width

      private final int width
    • leftInit

      private final int leftInit
    • rightInit

      private final int rightInit
    • downInit

      private final int downInit
    • upInit

      private final int upInit
  • Constructor Details

    • WhiteRectangleDetector

      public WhiteRectangleDetector(BitMatrix image) throws NotFoundException
      Throws:
      NotFoundException
    • WhiteRectangleDetector

      public WhiteRectangleDetector(BitMatrix image, int initSize, int x, int y) throws NotFoundException
      Parameters:
      image - barcode image to find a rectangle in
      initSize - initial size of search area around center
      x - x position of search center
      y - y position of search center
      Throws:
      NotFoundException - if image is too small to accommodate initSize
  • Method Details

    • detect

      public ResultPoint[] detect() throws NotFoundException

      Detects a candidate barcode-like rectangular region within an image. It starts around the center of the image, increases the size of the candidate region until it finds a white rectangular region.

      Returns:
      ResultPoint[] describing the corners of the rectangular region. The first and last points are opposed on the diagonal, as are the second and third. The first point will be the topmost point and the last, the bottommost. The second point will be leftmost and the third, the rightmost
      Throws:
      NotFoundException - if no Data Matrix Code can be found
    • getBlackPointOnSegment

      private ResultPoint getBlackPointOnSegment(float aX, float aY, float bX, float bY)
    • centerEdges

      private ResultPoint[] centerEdges(ResultPoint y, ResultPoint z, ResultPoint x, ResultPoint t)
      recenters the points of a constant distance towards the center
      Parameters:
      y - bottom most point
      z - left most point
      x - right most point
      t - top most point
      Returns:
      ResultPoint[] describing the corners of the rectangular region. The first and last points are opposed on the diagonal, as are the second and third. The first point will be the topmost point and the last, the bottommost. The second point will be leftmost and the third, the rightmost
    • containsBlackPoint

      private boolean containsBlackPoint(int a, int b, int fixed, boolean horizontal)
      Determines whether a segment contains a black point
      Parameters:
      a - min value of the scanned coordinate
      b - max value of the scanned coordinate
      fixed - value of fixed coordinate
      horizontal - set to true if scan must be horizontal, false if vertical
      Returns:
      true if a black point has been found, else false.