decode(image, hints) {
			let decoderResult;
			let points;
			if (hints !== undefined && hints !== null && undefined !== hints.get(DecodeHintType$1.PURE_BARCODE)) {
				const bits = QRCodeReader.extractPureBits(image.getBlackMatrix());
				decoderResult = this.decoder.decodeBitMatrix(bits, hints);
				points = QRCodeReader.NO_POINTS;
			}
			else {
				const detectorResult = new Detector$2(image.getBlackMatrix()).detect(hints);
				decoderResult = this.decoder.decodeBitMatrix(detectorResult.getBits(), hints);
				points = detectorResult.getPoints();
			}
			// If the code was mirrored: swap the bottom-left and the top-right points.
			if (decoderResult.getOther() instanceof QRCodeDecoderMetaData) {
				decoderResult.getOther().applyMirroredCorrection(points);
			}
			const result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat$1.QR_CODE, undefined);
			const byteSegments = decoderResult.getByteSegments();
			if (byteSegments !== null) {
				result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);
			}
			const ecLevel = decoderResult.getECLevel();
			if (ecLevel !== null) {
				result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);
			}
			if (decoderResult.hasStructuredAppend()) {
				result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_SEQUENCE, decoderResult.getStructuredAppendSequenceNumber());
				result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_PARITY, decoderResult.getStructuredAppendParity());
			}
			return result;
		}
Locates and decodes a QR code in an image.

@return a representing: string the content encoded by the QR code
@throws NotFoundException if a QR code cannot be found
@throws FormatException if a QR code cannot be decoded
@throws ChecksumException if error correction fails