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_QRFINDERPATTERNFINDER_H_ 8 #define _BC_QRFINDERPATTERNFINDER_H_ 9 class CBC_CommonBitMatrix; 10 class CBC_QRFinderPattern; 11 class CBC_ResultPoint; 12 class CBC_QRFinderPatternInfo; 13 14 class CBC_QRFinderPatternFinder { 15 private: 16 const static int32_t CENTER_QUORUM; 17 const static int32_t MIN_SKIP; 18 const static int32_t MAX_MODULES; 19 const static int32_t INTEGER_MATH_SHIFT; 20 FX_BOOL m_hasSkipped; 21 CBC_CommonBitMatrix* m_image; 22 CFX_Int32Array m_crossCheckStateCount; 23 CFX_PtrArray m_possibleCenters; 24 25 public: 26 CBC_QRFinderPatternFinder(CBC_CommonBitMatrix* image); 27 virtual ~CBC_QRFinderPatternFinder(); 28 int32_t FindRowSkip(); 29 CBC_CommonBitMatrix* GetImage(); 30 CBC_QRFinderPatternInfo* Find(int32_t hint, int32_t& e); 31 32 CFX_Int32Array& GetCrossCheckStateCount(); 33 CFX_PtrArray* GetPossibleCenters(); 34 CFX_PtrArray* SelectBestpatterns(int32_t& e); 35 36 FX_BOOL HandlePossibleCenter(const CFX_Int32Array& stateCount, 37 int32_t i, 38 int32_t j); 39 FX_BOOL HaveMultiplyConfirmedCenters(); 40 FX_FLOAT CenterFromEnd(const CFX_Int32Array& stateCount, int32_t end); 41 FX_FLOAT CrossCheckVertical(int32_t startI, 42 int32_t centerJ, 43 int32_t maxCount, 44 int32_t originalStateCountTotal); 45 FX_FLOAT CrossCheckHorizontal(int32_t startJ, 46 int32_t CenterI, 47 int32_t maxCOunt, 48 int32_t originalStateCountTotal); 49 static void OrderBestPatterns(CFX_PtrArray* patterns); 50 static FX_BOOL FoundPatternCross(const CFX_Int32Array& stateCount); 51 static FX_FLOAT Distance(CBC_ResultPoint* point1, CBC_ResultPoint* point2); 52 }; 53 #endif 54