// 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_DATAMATRIXDETECTOR_H_ #define _BC_DATAMATRIXDETECTOR_H_ class CBC_CommonBitMatrix; class CBC_WhiteRectangleDetector; class CBC_ResultPoint; class CBC_QRDetectorResult; class CBC_DataMatrixDetector; class ResultPointsAndTransitions; class CBC_ResultPointsAndTransitions { public: CBC_ResultPointsAndTransitions(CBC_ResultPoint *from, CBC_ResultPoint *to, int32_t transitions) { m_from = from; m_to = to; m_transitions = transitions; } ~CBC_ResultPointsAndTransitions() { } CBC_ResultPoint *GetFrom() { return m_from; } CBC_ResultPoint *GetTo() { return m_to; } int32_t GetTransitions() { return m_transitions; } private: CBC_ResultPoint *m_from; CBC_ResultPoint *m_to; int32_t m_transitions; }; class CBC_DataMatrixDetector { public: CBC_DataMatrixDetector(CBC_CommonBitMatrix *image); virtual ~CBC_DataMatrixDetector(); CBC_QRDetectorResult *Detect(int32_t &e); CBC_ResultPoint *CorrectTopRightRectangular(CBC_ResultPoint *bottomLeft, CBC_ResultPoint *bottomRight, CBC_ResultPoint *topLeft, CBC_ResultPoint *topRight, int32_t dimensionTop, int32_t dimensionRight); CBC_ResultPoint *CorrectTopRight(CBC_ResultPoint *bottomLeft, CBC_ResultPoint *bottomRight, CBC_ResultPoint *topLeft, CBC_ResultPoint *topRight, int32_t dimension); CBC_CommonBitMatrix *SampleGrid(CBC_CommonBitMatrix *image, CBC_ResultPoint *topLeft, CBC_ResultPoint *bottomLeft, CBC_ResultPoint *bottomRight, CBC_ResultPoint *topRight, int32_t dimensionX, int32_t dimensionY, int32_t &e); CBC_ResultPointsAndTransitions *TransitionsBetween(CBC_ResultPoint *from, CBC_ResultPoint *to); FX_BOOL IsValid(CBC_ResultPoint *p); int32_t Distance(CBC_ResultPoint *a, CBC_ResultPoint *b); void Increment(CFX_MapPtrTemplate &table, CBC_ResultPoint *key); int32_t Round(FX_FLOAT d); void OrderBestPatterns(CFX_PtrArray *patterns); virtual void Init(int32_t &e); private: CBC_CommonBitMatrix *m_image; CBC_WhiteRectangleDetector *m_rectangleDetector; const static int32_t INTEGERS[5]; }; #endif