summaryrefslogtreecommitdiff
path: root/xfa/src/fxbarcode/qrcode/BC_QRDetector.h
blob: 298ccf4d4c37a384cae00d1fd0f5f5592f957ccb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _BC_QRDETECTOR_H_
#define _BC_QRDETECTOR_H_
class CBC_ResultPoint;
class CBC_CommonBitMatrix;
class CBC_QRDetectorResult;
class CBC_QRFinderPatternInfo;
class CBC_QRAlignmentPattern;
class CBC_QRFinderPatternFinder;
class CBC_QRCoderVersion;
class CBC_QRGridSampler;
class CBC_QRAlignmentPatternFinder;
class CBC_QRAlignmentPattern;
class CBC_QRDetector;
class CBC_QRDetector
{
private:
    CBC_CommonBitMatrix *m_image;
public:
    CBC_QRDetector(CBC_CommonBitMatrix *image);
    virtual ~CBC_QRDetector();

    CBC_CommonBitMatrix* GetImage();
    CBC_QRDetectorResult* Detect(int32_t hints, int32_t &e);
    CBC_QRDetectorResult* ProcessFinderPatternInfo(CBC_QRFinderPatternInfo *info, int32_t &e);
    FX_FLOAT CalculateModuleSize(CBC_ResultPoint *topLeft, CBC_ResultPoint *topRight, CBC_ResultPoint *bottomLeft);
    FX_FLOAT CalculateModuleSizeOneWay(CBC_ResultPoint *pattern, CBC_ResultPoint *otherPattern);
    FX_FLOAT SizeOfBlackWhiteBlackRunBothWays(int32_t fromX, int32_t fromY, int32_t toX, int32_t toY);
    FX_FLOAT SizeOfBlackWhiteBlackRun(int32_t fromX, int32_t fromY, int32_t toX, int32_t toY);
    CBC_QRAlignmentPattern* FindAlignmentInRegion(FX_FLOAT overallEstModuleSize, int32_t estAlignmentX, int32_t estAlignmentY, FX_FLOAT allowanceFactor, int32_t &e);
    static int32_t Round(FX_FLOAT d);
    static int32_t ComputeDimension(CBC_ResultPoint *topLeft, CBC_ResultPoint *topRight, CBC_ResultPoint *bottomLeft, FX_FLOAT moduleSize, int32_t &e);
    static CBC_CommonBitMatrix* SampleGrid(CBC_CommonBitMatrix *image, CBC_ResultPoint *topLeft, CBC_ResultPoint *topRight,
                                           CBC_ResultPoint *bottomLeft, CBC_ResultPoint* alignmentPattern, int32_t dimension, int32_t &e);
};
#endif