Home | History | Annotate | Download | only in qrcode
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef _BC_QRDETECTOR_H_
      8 #define _BC_QRDETECTOR_H_
      9 class CBC_ResultPoint;
     10 class CBC_CommonBitMatrix;
     11 class CBC_QRDetectorResult;
     12 class CBC_QRFinderPatternInfo;
     13 class CBC_QRAlignmentPattern;
     14 class CBC_QRFinderPatternFinder;
     15 class CBC_QRCoderVersion;
     16 class CBC_QRGridSampler;
     17 class CBC_QRAlignmentPatternFinder;
     18 class CBC_QRAlignmentPattern;
     19 class CBC_QRDetector;
     20 class CBC_QRDetector {
     21  private:
     22   CBC_CommonBitMatrix* m_image;
     23 
     24  public:
     25   CBC_QRDetector(CBC_CommonBitMatrix* image);
     26   virtual ~CBC_QRDetector();
     27 
     28   CBC_CommonBitMatrix* GetImage();
     29   CBC_QRDetectorResult* Detect(int32_t hints, int32_t& e);
     30   CBC_QRDetectorResult* ProcessFinderPatternInfo(CBC_QRFinderPatternInfo* info,
     31                                                  int32_t& e);
     32   FX_FLOAT CalculateModuleSize(CBC_ResultPoint* topLeft,
     33                                CBC_ResultPoint* topRight,
     34                                CBC_ResultPoint* bottomLeft);
     35   FX_FLOAT CalculateModuleSizeOneWay(CBC_ResultPoint* pattern,
     36                                      CBC_ResultPoint* otherPattern);
     37   FX_FLOAT SizeOfBlackWhiteBlackRunBothWays(int32_t fromX,
     38                                             int32_t fromY,
     39                                             int32_t toX,
     40                                             int32_t toY);
     41   FX_FLOAT SizeOfBlackWhiteBlackRun(int32_t fromX,
     42                                     int32_t fromY,
     43                                     int32_t toX,
     44                                     int32_t toY);
     45   CBC_QRAlignmentPattern* FindAlignmentInRegion(FX_FLOAT overallEstModuleSize,
     46                                                 int32_t estAlignmentX,
     47                                                 int32_t estAlignmentY,
     48                                                 FX_FLOAT allowanceFactor,
     49                                                 int32_t& e);
     50   static int32_t Round(FX_FLOAT d);
     51   static int32_t ComputeDimension(CBC_ResultPoint* topLeft,
     52                                   CBC_ResultPoint* topRight,
     53                                   CBC_ResultPoint* bottomLeft,
     54                                   FX_FLOAT moduleSize,
     55                                   int32_t& e);
     56   static CBC_CommonBitMatrix* SampleGrid(CBC_CommonBitMatrix* image,
     57                                          CBC_ResultPoint* topLeft,
     58                                          CBC_ResultPoint* topRight,
     59                                          CBC_ResultPoint* bottomLeft,
     60                                          CBC_ResultPoint* alignmentPattern,
     61                                          int32_t dimension,
     62                                          int32_t& e);
     63 };
     64 #endif
     65