com.google.zxing.qrcode.detector.Detector#com.google.zxing.ResultPoint源码实例Demo

下面列出了com.google.zxing.qrcode.detector.Detector#com.google.zxing.ResultPoint 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: flutter_qr_reader   文件: QRCodeReaderView.java
/**
 * Transform result to surfaceView coordinates
 * <p>
 * This method is needed because coordinates are given in landscape google.zxing.client.android.android.com.google.zxing.client.android.camera coordinates when
 * device is in portrait mode and different coordinates otherwise.
 *
 * @return a new PointF array with transformed points
 */
private PointF[] transformToViewCoordinates(QRCodeReaderView view,
                                            ResultPoint[] resultPoints) {
    int orientationDegrees = view.getCameraDisplayOrientation();
    Orientation orientation =
            orientationDegrees == 90 || orientationDegrees == 270 ? Orientation.PORTRAIT
                    : Orientation.LANDSCAPE;
    Point viewSize = new Point(view.getWidth(), view.getHeight());
    Point cameraPreviewSize = view.mCameraManager.getPreviewSize();
    boolean isMirrorCamera =
            view.mCameraManager.getPreviewCameraId()
                    == Camera.CameraInfo.CAMERA_FACING_FRONT;

    return qrToViewPointTransformer.transform(resultPoints, isMirrorCamera, orientation,
            viewSize, cameraPreviewSize);
}
 
源代码2 项目: reacteu-app   文件: UPCEANExtension5Support.java
Result decodeRow(int rowNumber, BitArray row, int[] extensionStartRange) throws NotFoundException {

    StringBuilder result = decodeRowStringBuffer;
    result.setLength(0);
    int end = decodeMiddle(row, extensionStartRange, result);

    String resultString = result.toString();
    Map<ResultMetadataType,Object> extensionData = parseExtensionString(resultString);

    Result extensionResult =
        new Result(resultString,
                   null,
                   new ResultPoint[] {
                       new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, (float) rowNumber),
                       new ResultPoint((float) end, (float) rowNumber),
                   },
                   BarcodeFormat.UPC_EAN_EXTENSION);
    if (extensionData != null) {
      extensionResult.putAllMetadata(extensionData);
    }
    return extensionResult;
  }
 
/**
 * Creates a BitMatrix by sampling the provided image.
 * topLeft, topRight, bottomRight, and bottomLeft are the centers of the squares on the
 * diagonal just outside the bull's eye.
 */
private BitMatrix sampleGrid(BitMatrix image,
                             ResultPoint topLeft,
                             ResultPoint topRight,
                             ResultPoint bottomRight,
                             ResultPoint bottomLeft) throws NotFoundException {
    
  GridSampler sampler = GridSampler.getInstance();
  int dimension = getDimension();

  float low = dimension / 2.0f - nbCenterLayers;
  float high = dimension / 2.0f + nbCenterLayers;

  return sampler.sampleGrid(image,
                            dimension,
                            dimension,
                            low, low,   // topleft
                            high, low,  // topright
                            high, high, // bottomright
                            low, high,  // bottomleft
                            topLeft.getX(), topLeft.getY(),
                            topRight.getX(), topRight.getY(),
                            bottomRight.getX(), bottomRight.getY(),
                            bottomLeft.getX(), bottomLeft.getY());
}
 
private Pair decodePair(BitArray row, boolean right, int rowNumber, Map<DecodeHintType,?> hints) {
  try {
    int[] startEnd = findFinderPattern(row, 0, right);
    FinderPattern pattern = parseFoundFinderPattern(row, rowNumber, right, startEnd);

    ResultPointCallback resultPointCallback = hints == null ? null :
      (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);

    if (resultPointCallback != null) {
      float center = (startEnd[0] + startEnd[1]) / 2.0f;
      if (right) {
        // row is actually reversed
        center = row.getSize() - 1 - center;
      }
      resultPointCallback.foundPossibleResultPoint(new ResultPoint(center, rowNumber));
    }

    DataCharacter outside = decodeDataCharacter(row, pattern, true);
    DataCharacter inside = decodeDataCharacter(row, pattern, false);
    return new Pair(1597 * outside.getValue() + inside.getValue(),
                    outside.getChecksumPortion() + 4 * inside.getChecksumPortion(),
                    pattern);
  } catch (NotFoundException ignored) {
    return null;
  }
}
 
源代码5 项目: ZXing-Orient   文件: Detector.java
/**
 * Creates a BitMatrix by sampling the provided image.
 * topLeft, topRight, bottomRight, and bottomLeft are the centers of the squares on the
 * diagonal just outside the bull's eye.
 */
private BitMatrix sampleGrid(BitMatrix image,
                             ResultPoint topLeft,
                             ResultPoint topRight,
                             ResultPoint bottomRight,
                             ResultPoint bottomLeft) throws NotFoundException {
    
  GridSampler sampler = GridSampler.getInstance();
  int dimension = getDimension();

  float low = dimension / 2.0f - nbCenterLayers;
  float high = dimension / 2.0f + nbCenterLayers;

  return sampler.sampleGrid(image,
                            dimension,
                            dimension,
                            low, low,   // topleft
                            high, low,  // topright
                            high, high, // bottomright
                            low, high,  // bottomleft
                            topLeft.getX(), topLeft.getY(),
                            topRight.getX(), topRight.getY(),
                            bottomRight.getX(), bottomRight.getY(),
                            bottomLeft.getX(), bottomLeft.getY());
}
 
Result decodeRow(int rowNumber, BitArray row, int[] extensionStartRange) throws NotFoundException {

    StringBuilder result = decodeRowStringBuffer;
    result.setLength(0);
    int end = decodeMiddle(row, extensionStartRange, result);

    String resultString = result.toString();
    Map<ResultMetadataType,Object> extensionData = parseExtensionString(resultString);

    Result extensionResult =
        new Result(resultString,
                   null,
                   new ResultPoint[] {
                       new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, rowNumber),
                       new ResultPoint(end, rowNumber),
                   },
                   BarcodeFormat.UPC_EAN_EXTENSION);
    if (extensionData != null) {
      extensionResult.putAllMetadata(extensionData);
    }
    return extensionResult;
  }
 
源代码7 项目: ScreenCapture   文件: UPCEANExtension5Support.java
Result decodeRow(int rowNumber, BitArray row, int[] extensionStartRange) throws NotFoundException {

    StringBuilder result = decodeRowStringBuffer;
    result.setLength(0);
    int end = decodeMiddle(row, extensionStartRange, result);

    String resultString = result.toString();
    Map<ResultMetadataType,Object> extensionData = parseExtensionString(resultString);

    Result extensionResult =
        new Result(resultString,
                   null,
                   new ResultPoint[] {
                       new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, rowNumber),
                       new ResultPoint(end, rowNumber),
                   },
                   BarcodeFormat.UPC_EAN_EXTENSION);
    if (extensionData != null) {
      extensionResult.putAllMetadata(extensionData);
    }
    return extensionResult;
  }
 
源代码8 项目: ZXing-Orient   文件: Detector.java
/**
 * <p>Estimates module size based on two finder patterns -- it uses
 * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the
 * width of each, measuring along the axis between their centers.</p>
 */
private float calculateModuleSizeOneWay(ResultPoint pattern, ResultPoint otherPattern) {
  float moduleSizeEst1 = sizeOfBlackWhiteBlackRunBothWays((int) pattern.getX(),
      (int) pattern.getY(),
      (int) otherPattern.getX(),
      (int) otherPattern.getY());
  float moduleSizeEst2 = sizeOfBlackWhiteBlackRunBothWays((int) otherPattern.getX(),
      (int) otherPattern.getY(),
      (int) pattern.getX(),
      (int) pattern.getY());
  if (Float.isNaN(moduleSizeEst1)) {
    return moduleSizeEst2 / 7.0f;
  }
  if (Float.isNaN(moduleSizeEst2)) {
    return moduleSizeEst1 / 7.0f;
  }
  // Average them, and divide by 7 since we've counted the width of 3 black modules,
  // and 1 white and 1 black module on either side. Ergo, divide sum by 14.
  return (moduleSizeEst1 + moduleSizeEst2) / 14.0f;
}
 
源代码9 项目: ScreenCapture   文件: UPCEANExtension2Support.java
Result decodeRow(int rowNumber, BitArray row, int[] extensionStartRange) throws NotFoundException {

    StringBuilder result = decodeRowStringBuffer;
    result.setLength(0);
    int end = decodeMiddle(row, extensionStartRange, result);

    String resultString = result.toString();
    Map<ResultMetadataType,Object> extensionData = parseExtensionString(resultString);

    Result extensionResult =
        new Result(resultString,
                   null,
                   new ResultPoint[] {
                       new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, rowNumber),
                       new ResultPoint(end, rowNumber),
                   },
                   BarcodeFormat.UPC_EAN_EXTENSION);
    if (extensionData != null) {
      extensionResult.putAllMetadata(extensionData);
    }
    return extensionResult;
  }
 
/**
 * @return number of rows we could safely skip during scanning, based on the first
 *         two finder patterns that have been located. In some cases their position will
 *         allow us to infer that the third pattern must lie below a certain point farther
 *         down in the image.
 */
private int findRowSkip() {
  int max = possibleCenters.size();
  if (max <= 1) {
    return 0;
  }
  ResultPoint firstConfirmedCenter = null;
  for (FinderPattern center : possibleCenters) {
    if (center.getCount() >= CENTER_QUORUM) {
      if (firstConfirmedCenter == null) {
        firstConfirmedCenter = center;
      } else {
        // We have two confirmed centers
        // How far down can we skip before resuming looking for the next
        // pattern? In the worst case, only the difference between the
        // difference in the x / y coordinates of the two centers.
        // This is the case where you find top left last.
        hasSkipped = true;
        return (int) (Math.abs(firstConfirmedCenter.getX() - center.getX()) -
            Math.abs(firstConfirmedCenter.getY() - center.getY())) / 2;
      }
    }
  }
  return 0;
}
 
private static Result translateResultPoints(Result result, int xOffset, int yOffset) {
  ResultPoint[] oldResultPoints = result.getResultPoints();
  if (oldResultPoints == null) {
    return result;
  }
  ResultPoint[] newResultPoints = new ResultPoint[oldResultPoints.length];
  for (int i = 0; i < oldResultPoints.length; i++) {
    ResultPoint oldPoint = oldResultPoints[i];
    if (oldPoint != null) {
      newResultPoints[i] = new ResultPoint(oldPoint.getX() + xOffset, oldPoint.getY() + yOffset);
    }
  }
  Result newResult = new Result(result.getText(),
                                result.getRawBytes(),
                                result.getNumBits(),
                                newResultPoints,
                                result.getBarcodeFormat(),
                                result.getTimestamp());
  newResult.putAllMetadata(result.getResultMetadata());
  return newResult;
}
 
源代码12 项目: reacteu-app   文件: QRCodeReader.java
@Override
public Result decode(BinaryBitmap image, Map<DecodeHintType,?> hints)
    throws NotFoundException, ChecksumException, FormatException {
  DecoderResult decoderResult;
  ResultPoint[] points;
  if (hints != null && hints.containsKey(DecodeHintType.PURE_BARCODE)) {
    BitMatrix bits = extractPureBits(image.getBlackMatrix());
    decoderResult = decoder.decode(bits, hints);
    points = NO_POINTS;
  } else {
    DetectorResult detectorResult = new Detector(image.getBlackMatrix()).detect(hints);
    decoderResult = decoder.decode(detectorResult.getBits(), hints);
    points = detectorResult.getPoints();
  }

  Result result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), points, BarcodeFormat.QR_CODE);
  List<byte[]> byteSegments = decoderResult.getByteSegments();
  if (byteSegments != null) {
    result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);
  }
  String ecLevel = decoderResult.getECLevel();
  if (ecLevel != null) {
    result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);
  }
  return result;
}
 
源代码13 项目: ZXing-Orient   文件: FinderPatternFinder.java
/**
 * @return number of rows we could safely skip during scanning, based on the first
 *         two finder patterns that have been located. In some cases their position will
 *         allow us to infer that the third pattern must lie below a certain point farther
 *         down in the image.
 */
private int findRowSkip() {
  int max = possibleCenters.size();
  if (max <= 1) {
    return 0;
  }
  ResultPoint firstConfirmedCenter = null;
  for (FinderPattern center : possibleCenters) {
    if (center.getCount() >= CENTER_QUORUM) {
      if (firstConfirmedCenter == null) {
        firstConfirmedCenter = center;
      } else {
        // We have two confirmed centers
        // How far down can we skip before resuming looking for the next
        // pattern? In the worst case, only the difference between the
        // difference in the x / y coordinates of the two centers.
        // This is the case where you find top left last.
        hasSkipped = true;
        return (int) (Math.abs(firstConfirmedCenter.getX() - center.getX()) -
            Math.abs(firstConfirmedCenter.getY() - center.getY())) / 2;
      }
    }
  }
  return 0;
}
 
源代码14 项目: Telegram   文件: Detector.java
/**
 * <p>Estimates module size based on two finder patterns -- it uses
 * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the
 * width of each, measuring along the axis between their centers.</p>
 */
private float calculateModuleSizeOneWay(ResultPoint pattern, ResultPoint otherPattern) {
  float moduleSizeEst1 = sizeOfBlackWhiteBlackRunBothWays((int) pattern.getX(),
      (int) pattern.getY(),
      (int) otherPattern.getX(),
      (int) otherPattern.getY());
  float moduleSizeEst2 = sizeOfBlackWhiteBlackRunBothWays((int) otherPattern.getX(),
      (int) otherPattern.getY(),
      (int) pattern.getX(),
      (int) pattern.getY());
  if (Float.isNaN(moduleSizeEst1)) {
    return moduleSizeEst2 / 7.0f;
  }
  if (Float.isNaN(moduleSizeEst2)) {
    return moduleSizeEst1 / 7.0f;
  }
  // Average them, and divide by 7 since we've counted the width of 3 black modules,
  // and 1 white and 1 black module on either side. Ergo, divide sum by 14.
  return (moduleSizeEst1 + moduleSizeEst2) / 14.0f;
}
 
/**
 * <p>Computes the dimension (number of modules on a size) of the QR Code based on the position
 * of the finder patterns and estimated module size.</p>
 */
private static int computeDimension(ResultPoint topLeft,
                                    ResultPoint topRight,
                                    ResultPoint bottomLeft,
                                    float moduleSize) throws NotFoundException {
  int tltrCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, topRight) / moduleSize);
  int tlblCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, bottomLeft) / moduleSize);
  int dimension = ((tltrCentersDimension + tlblCentersDimension) / 2) + 7;
  switch (dimension & 0x03) { // mod 4
    case 0:
      dimension++;
      break;
      // 1? do nothing
    case 2:
      dimension--;
      break;
    case 3:
      throw NotFoundException.getNotFoundInstance();
  }
  return dimension;
}
 
Result decodeRow(int rowNumber, BitArray row, int[] extensionStartRange) throws NotFoundException {

    StringBuilder result = decodeRowStringBuffer;
    result.setLength(0);
    int end = decodeMiddle(row, extensionStartRange, result);

    String resultString = result.toString();
    Map<ResultMetadataType,Object> extensionData = parseExtensionString(resultString);

    Result extensionResult =
        new Result(resultString,
                   null,
                   new ResultPoint[] {
                       new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, (float) rowNumber),
                       new ResultPoint((float) end, (float) rowNumber),
                   },
                   BarcodeFormat.UPC_EAN_EXTENSION);
    if (extensionData != null) {
      extensionResult.putAllMetadata(extensionData);
    }
    return extensionResult;
  }
 
源代码17 项目: android-quick-response-code   文件: Detector.java
public static PerspectiveTransform createTransform(ResultPoint topLeft, ResultPoint topRight, ResultPoint bottomLeft, ResultPoint alignmentPattern, int dimension) {
    float dimMinusThree = dimension - 3.5f;
    float bottomRightX;
    float bottomRightY;
    float sourceBottomRightX;
    float sourceBottomRightY;
    if (alignmentPattern != null) {
        bottomRightX = alignmentPattern.getX();
        bottomRightY = alignmentPattern.getY();
        sourceBottomRightX = sourceBottomRightY = dimMinusThree - 3.0f;
    } else {
        // Don't have an alignment pattern, just make up the bottom-right
        // point
        bottomRightX = (topRight.getX() - topLeft.getX()) + bottomLeft.getX();
        bottomRightY = (topRight.getY() - topLeft.getY()) + bottomLeft.getY();
        sourceBottomRightX = sourceBottomRightY = dimMinusThree;
    }

    return PerspectiveTransform.quadrilateralToQuadrilateral(3.5f, 3.5f, dimMinusThree, 3.5f, sourceBottomRightX, sourceBottomRightY, 3.5f, dimMinusThree,
            topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRightX, bottomRightY, bottomLeft.getX(), bottomLeft.getY());
}
 
/**
 * Expand the square represented by the corner points by pushing out equally in all directions
 *
 * @param cornerPoints the corners of the square, which has the bull's eye at its center
 * @param oldSide the original length of the side of the square in the target bit matrix
 * @param newSide the new length of the size of the square in the target bit matrix
 * @return the corners of the expanded square
 */
private static ResultPoint[] expandSquare(ResultPoint[] cornerPoints, float oldSide, float newSide) {
  float ratio = newSide / (2 * oldSide);
  float dx = cornerPoints[0].getX() - cornerPoints[2].getX();
  float dy = cornerPoints[0].getY() - cornerPoints[2].getY();
  float centerx = (cornerPoints[0].getX() + cornerPoints[2].getX()) / 2.0f;
  float centery = (cornerPoints[0].getY() + cornerPoints[2].getY()) / 2.0f;

  ResultPoint result0 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);
  ResultPoint result2 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);

  dx = cornerPoints[1].getX() - cornerPoints[3].getX();
  dy = cornerPoints[1].getY() - cornerPoints[3].getY();
  centerx = (cornerPoints[1].getX() + cornerPoints[3].getX()) / 2.0f;
  centery = (cornerPoints[1].getY() + cornerPoints[3].getY()) / 2.0f;
  ResultPoint result1 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);
  ResultPoint result3 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);

  return new ResultPoint[]{result0, result1, result2, result3};
}
 
/**
 * recenters the points of a constant distance towards the center
 *
 * @param y bottom most point
 * @param z left most point
 * @param x right most point
 * @param t top most point
 * @return {@link 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
 */
private ResultPoint[] centerEdges(ResultPoint y, ResultPoint z,
                                  ResultPoint x, ResultPoint t) {

  //
  //       t            t
  //  z                      x
  //        x    OR    z
  //   y                    y
  //

  float yi = y.getX();
  float yj = y.getY();
  float zi = z.getX();
  float zj = z.getY();
  float xi = x.getX();
  float xj = x.getY();
  float ti = t.getX();
  float tj = t.getY();

  if (yi < width / 2.0f) {
    return new ResultPoint[]{
        new ResultPoint(ti - CORR, tj + CORR),
        new ResultPoint(zi + CORR, zj + CORR),
        new ResultPoint(xi - CORR, xj - CORR),
        new ResultPoint(yi + CORR, yj - CORR)};
  } else {
    return new ResultPoint[]{
        new ResultPoint(ti + CORR, tj + CORR),
        new ResultPoint(zi + CORR, zj - CORR),
        new ResultPoint(xi - CORR, xj + CORR),
        new ResultPoint(yi - CORR, yj - CORR)};
  }
}
 
源代码20 项目: barcodescanner-lib-aar   文件: ByQuadrantReader.java
private static void makeAbsolute(ResultPoint[] points, int leftOffset, int topOffset) {
  if (points != null) {
    for (int i = 0; i < points.length; i++) {
      ResultPoint relative = points[i];
      points[i] = new ResultPoint(relative.getX() + leftOffset, relative.getY() + topOffset);
    }
  }
}
 
源代码21 项目: RipplePower   文件: QRCodeDecoderMetaData.java
/**
 * Apply the result points' order correction due to mirroring.
 * 
 * @param points
 *            Array of points to apply mirror correction to.
 */
public void applyMirroredCorrection(ResultPoint[] points) {
	if (!mirrored || points == null || points.length < 3) {
		return;
	}
	ResultPoint bottomLeft = points[0];
	points[0] = points[2];
	points[2] = bottomLeft;
	// No need to 'fix' top-left and alignment pattern.
}
 
源代码22 项目: QrCodeScanner   文件: RSS14Reader.java
private static Result constructResult(Pair leftPair, Pair rightPair) {
  long symbolValue = 4537077L * leftPair.getValue() + rightPair.getValue();
  String text = String.valueOf(symbolValue);

  StringBuilder buffer = new StringBuilder(14);
  for (int i = 13 - text.length(); i > 0; i--) {
    buffer.append('0');
  }
  buffer.append(text);

  int checkDigit = 0;
  for (int i = 0; i < 13; i++) {
    int digit = buffer.charAt(i) - '0';
    checkDigit += (i & 0x01) == 0 ? 3 * digit : digit;
  }
  checkDigit = 10 - (checkDigit % 10);
  if (checkDigit == 10) {
    checkDigit = 0;
  }
  buffer.append(checkDigit);

  ResultPoint[] leftPoints = leftPair.getFinderPattern().getResultPoints();
  ResultPoint[] rightPoints = rightPair.getFinderPattern().getResultPoints();
  return new Result(
      buffer.toString(),
      null,
      new ResultPoint[] { leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1], },
      BarcodeFormat.RSS_14);
}
 
源代码23 项目: qrcode_android   文件: CameraDecodeThread.java
public CameraDecodeThread(IZXingActivity ivew, int decodeMode) {

        this.ivew = ivew;
        this.activity = ivew.getActivity();
        handlerInitLatch = new CountDownLatch(1);

        hints = new EnumMap<DecodeHintType, Object>(DecodeHintType.class);

        Collection<BarcodeFormat> decodeFormats = new ArrayList<BarcodeFormat>();
        //移除了所有与BarcodeFormat.CODE_128,二维码,不相关的格式
//        decodeFormats.addAll(EnumSet.of(BarcodeFormat.AZTEC));
//        decodeFormats.addAll(EnumSet.of(BarcodeFormat.PDF_417));

        switch (decodeMode) {
            case BARCODE_MODE:
                decodeFormats.addAll(DecodeFormatManager.getBarCodeFormats());
                break;

            case QRCODE_MODE:
                decodeFormats.addAll(DecodeFormatManager.getQrCodeFormats());
                break;

            case ALL_MODE:
                decodeFormats.addAll(DecodeFormatManager.getBarCodeFormats());
                decodeFormats.addAll(DecodeFormatManager.getQrCodeFormats());
                break;

            default:
                break;
        }

        hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats);
        hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, new ResultPointCallback() {
            @Override
            public void foundPossibleResultPoint(ResultPoint point) {
                CameraZoomStrategy.getInstance().findPossiblePoint(point);
            }
        });
    }
 
源代码24 项目: reacteu-app   文件: Detector.java
/**
 * Samples an Aztec matrix from an image
 */
private BitMatrix sampleGrid(BitMatrix image,
                             ResultPoint topLeft,
                             ResultPoint bottomLeft,
                             ResultPoint bottomRight,
                             ResultPoint topRight) throws NotFoundException {

  int dimension;
  if (compact) {
    dimension = 4*nbLayers+11;
  } else {
    if (nbLayers <= 4) {
      dimension = 4*nbLayers + 15;
    } else {
      dimension = 4*nbLayers + 2*((nbLayers-4)/8 + 1) + 15 ;
    }
  }

  GridSampler sampler = GridSampler.getInstance();

  return sampler.sampleGrid(image,
    dimension,
    dimension,
    0.5f,
    0.5f,
    dimension - 0.5f,
    0.5f,
    dimension - 0.5f,
    dimension - 0.5f,
    0.5f,
    dimension - 0.5f,
    topLeft.getX(),
    topLeft.getY(),
    topRight.getX(),
    topRight.getY(),
    bottomRight.getX(),
    bottomRight.getY(),
    bottomLeft.getX(),
    bottomLeft.getY());
}
 
源代码25 项目: Roid-Library   文件: ViewfinderView.java
public ViewfinderView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // Initialize these once for performance rather than calling them
    // every
    // time in onDraw().
    paint = new Paint();
    Resources resources = getResources();
    maskColor = resources.getColor(R.color.viewfinder_mask);
    resultColor = resources.getColor(R.color.result_view);
    frameColor = resources.getColor(R.color.viewfinder_frame);
    resultPointColor = resources.getColor(R.color.possible_result_points);
    possibleResultPoints = new HashSet<ResultPoint>(5);
}
 
源代码26 项目: android-apps   文件: ViewfinderView.java
public void addPossibleResultPoint(ResultPoint point) {
  List<ResultPoint> points = possibleResultPoints;
  synchronized (points) {
    points.add(point);
    int size = points.size();
    if (size > MAX_RESULT_POINTS) {
      // trim it
      points.subList(0, size - MAX_RESULT_POINTS / 2).clear();
    }
  }
}
 
源代码27 项目: Telegram-FOSS   文件: WhiteRectangleDetector.java
/**
 * recenters the points of a constant distance towards the center
 *
 * @param y bottom most point
 * @param z left most point
 * @param x right most point
 * @param t top most point
 * @return {@link 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
 */
private ResultPoint[] centerEdges(ResultPoint y, ResultPoint z,
                                  ResultPoint x, ResultPoint t) {

  //
  //       t            t
  //  z                      x
  //        x    OR    z
  //   y                    y
  //

  float yi = y.getX();
  float yj = y.getY();
  float zi = z.getX();
  float zj = z.getY();
  float xi = x.getX();
  float xj = x.getY();
  float ti = t.getX();
  float tj = t.getY();

  if (yi < width / 2.0f) {
    return new ResultPoint[]{
        new ResultPoint(ti - CORR, tj + CORR),
        new ResultPoint(zi + CORR, zj + CORR),
        new ResultPoint(xi - CORR, xj - CORR),
        new ResultPoint(yi + CORR, yj - CORR)};
  } else {
    return new ResultPoint[]{
        new ResultPoint(ti + CORR, tj + CORR),
        new ResultPoint(zi + CORR, zj - CORR),
        new ResultPoint(xi - CORR, xj + CORR),
        new ResultPoint(yi - CORR, yj - CORR)};
  }
}
 
源代码28 项目: reacteu-app   文件: ViewfinderView.java
public void addPossibleResultPoint(ResultPoint point) {
  List<ResultPoint> points = possibleResultPoints;
  synchronized (points) {
    points.add(point);
    int size = points.size();
    if (size > MAX_RESULT_POINTS) {
      // trim it
      points.subList(0, size - MAX_RESULT_POINTS / 2).clear();
    }
  }
}
 
源代码29 项目: ScreenCapture   文件: QRCodeDecoderMetaData.java
/**
 * Apply the result points' order correction due to mirroring.
 *
 * @param points Array of points to apply mirror correction to.
 */
public void applyMirroredCorrection(ResultPoint[] points) {
  if (!mirrored || points == null || points.length < 3) {
    return;
  }
  ResultPoint bottomLeft = points[0];
  points[0] = points[2];
  points[2] = bottomLeft;
  // No need to 'fix' top-left and alignment pattern.
}
 
源代码30 项目: weex   文件: PDF417Reader.java
private static int getMinCodewordWidth(ResultPoint[] p) {
  return Math.min(
      Math.min(getMinWidth(p[0], p[4]), getMinWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /
          PDF417Common.MODULES_IN_STOP_PATTERN),
      Math.min(getMinWidth(p[1], p[5]), getMinWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /
          PDF417Common.MODULES_IN_STOP_PATTERN));
}