| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 // Original code is licensed as follows: | 6 // Original code is licensed as follows: |
| 7 /* | 7 /* |
| 8 * Copyright 2007 ZXing authors | 8 * Copyright 2007 ZXing authors |
| 9 * | 9 * |
| 10 * Licensed under the Apache License, Version 2.0 (the "License"); | 10 * Licensed under the Apache License, Version 2.0 (the "License"); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "xfa/fxbarcode/qrcode/BC_QRDetectorResult.h" | 34 #include "xfa/fxbarcode/qrcode/BC_QRDetectorResult.h" |
| 35 #include "xfa/fxbarcode/qrcode/BC_QRFinderPattern.h" | 35 #include "xfa/fxbarcode/qrcode/BC_QRFinderPattern.h" |
| 36 #include "xfa/fxbarcode/qrcode/BC_QRFinderPatternFinder.h" | 36 #include "xfa/fxbarcode/qrcode/BC_QRFinderPatternFinder.h" |
| 37 #include "xfa/fxbarcode/qrcode/BC_QRGridSampler.h" | 37 #include "xfa/fxbarcode/qrcode/BC_QRGridSampler.h" |
| 38 | 38 |
| 39 CBC_QRDetector::CBC_QRDetector(CBC_CommonBitMatrix* image) : m_image(image) {} | 39 CBC_QRDetector::CBC_QRDetector(CBC_CommonBitMatrix* image) : m_image(image) {} |
| 40 CBC_QRDetector::~CBC_QRDetector() {} | 40 CBC_QRDetector::~CBC_QRDetector() {} |
| 41 CBC_QRDetectorResult* CBC_QRDetector::Detect(int32_t hints, int32_t& e) { | 41 CBC_QRDetectorResult* CBC_QRDetector::Detect(int32_t hints, int32_t& e) { |
| 42 CBC_QRFinderPatternFinder finder(m_image); | 42 CBC_QRFinderPatternFinder finder(m_image); |
| 43 std::unique_ptr<CBC_QRFinderPatternInfo> info(finder.Find(hints, e)); | 43 std::unique_ptr<CBC_QRFinderPatternInfo> info(finder.Find(hints, e)); |
| 44 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 44 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 45 CBC_QRDetectorResult* qdr = ProcessFinderPatternInfo(info.get(), e); | 45 CBC_QRDetectorResult* qdr = ProcessFinderPatternInfo(info.get(), e); |
| 46 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 46 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 47 return qdr; | 47 return qdr; |
| 48 } | 48 } |
| 49 CBC_QRDetectorResult* CBC_QRDetector::ProcessFinderPatternInfo( | 49 CBC_QRDetectorResult* CBC_QRDetector::ProcessFinderPatternInfo( |
| 50 CBC_QRFinderPatternInfo* info, | 50 CBC_QRFinderPatternInfo* info, |
| 51 int32_t& e) { | 51 int32_t& e) { |
| 52 std::unique_ptr<CBC_QRFinderPattern> topLeft(info->GetTopLeft()); | 52 std::unique_ptr<CBC_QRFinderPattern> topLeft(info->GetTopLeft()); |
| 53 std::unique_ptr<CBC_QRFinderPattern> topRight(info->GetTopRight()); | 53 std::unique_ptr<CBC_QRFinderPattern> topRight(info->GetTopRight()); |
| 54 std::unique_ptr<CBC_QRFinderPattern> bottomLeft(info->GetBottomLeft()); | 54 std::unique_ptr<CBC_QRFinderPattern> bottomLeft(info->GetBottomLeft()); |
| 55 FX_FLOAT moduleSize = | 55 FX_FLOAT moduleSize = |
| 56 CalculateModuleSize(topLeft.get(), topRight.get(), bottomLeft.get()); | 56 CalculateModuleSize(topLeft.get(), topRight.get(), bottomLeft.get()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 85 moduleSize, estAlignmentX, estAlignmentY, (FX_FLOAT)i, e); | 85 moduleSize, estAlignmentX, estAlignmentY, (FX_FLOAT)i, e); |
| 86 if (temp) { | 86 if (temp) { |
| 87 alignmentPattern = temp; | 87 alignmentPattern = temp; |
| 88 break; | 88 break; |
| 89 } | 89 } |
| 90 } | 90 } |
| 91 } | 91 } |
| 92 CBC_CommonBitMatrix* bits = | 92 CBC_CommonBitMatrix* bits = |
| 93 SampleGrid(m_image, topLeft.get(), topRight.get(), bottomLeft.get(), | 93 SampleGrid(m_image, topLeft.get(), topRight.get(), bottomLeft.get(), |
| 94 (CBC_ResultPoint*)(alignmentPattern), dimension, e); | 94 (CBC_ResultPoint*)(alignmentPattern), dimension, e); |
| 95 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 95 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 96 | 96 |
| 97 CFX_ArrayTemplate<CBC_ResultPoint*>* points = | 97 CFX_ArrayTemplate<CBC_ResultPoint*>* points = |
| 98 new CFX_ArrayTemplate<CBC_ResultPoint*>(); | 98 new CFX_ArrayTemplate<CBC_ResultPoint*>(); |
| 99 points->Add(bottomLeft.release()); | 99 points->Add(bottomLeft.release()); |
| 100 points->Add(topLeft.release()); | 100 points->Add(topLeft.release()); |
| 101 points->Add(topRight.release()); | 101 points->Add(topRight.release()); |
| 102 if (alignmentPattern) | 102 if (alignmentPattern) |
| 103 points->Add(alignmentPattern); | 103 points->Add(alignmentPattern); |
| 104 return new CBC_QRDetectorResult(bits, points); | 104 return new CBC_QRDetectorResult(bits, points); |
| 105 } | 105 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 124 bottomRightX = (topRight->GetX() - topLeft->GetX()) + bottomLeft->GetX(); | 124 bottomRightX = (topRight->GetX() - topLeft->GetX()) + bottomLeft->GetX(); |
| 125 bottomRightY = (topRight->GetY() - topLeft->GetY()) + bottomLeft->GetY(); | 125 bottomRightY = (topRight->GetY() - topLeft->GetY()) + bottomLeft->GetY(); |
| 126 sourceBottomRightX = sourceBottomRightY = dimMinusThree; | 126 sourceBottomRightX = sourceBottomRightY = dimMinusThree; |
| 127 } | 127 } |
| 128 CBC_QRGridSampler& sampler = CBC_QRGridSampler::GetInstance(); | 128 CBC_QRGridSampler& sampler = CBC_QRGridSampler::GetInstance(); |
| 129 CBC_CommonBitMatrix* cbm = sampler.SampleGrid( | 129 CBC_CommonBitMatrix* cbm = sampler.SampleGrid( |
| 130 image, dimension, dimension, 3.5f, 3.5f, dimMinusThree, 3.5f, | 130 image, dimension, dimension, 3.5f, 3.5f, dimMinusThree, 3.5f, |
| 131 sourceBottomRightX, sourceBottomRightY, 3.5f, dimMinusThree, | 131 sourceBottomRightX, sourceBottomRightY, 3.5f, dimMinusThree, |
| 132 topLeft->GetX(), topLeft->GetY(), topRight->GetX(), topRight->GetY(), | 132 topLeft->GetX(), topLeft->GetY(), topRight->GetX(), topRight->GetY(), |
| 133 bottomRightX, bottomRightY, bottomLeft->GetX(), bottomLeft->GetY(), e); | 133 bottomRightX, bottomRightY, bottomLeft->GetX(), bottomLeft->GetY(), e); |
| 134 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 134 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 135 return cbm; | 135 return cbm; |
| 136 } | 136 } |
| 137 int32_t CBC_QRDetector::ComputeDimension(CBC_ResultPoint* topLeft, | 137 int32_t CBC_QRDetector::ComputeDimension(CBC_ResultPoint* topLeft, |
| 138 CBC_ResultPoint* topRight, | 138 CBC_ResultPoint* topRight, |
| 139 CBC_ResultPoint* bottomLeft, | 139 CBC_ResultPoint* bottomLeft, |
| 140 FX_FLOAT moduleSize, | 140 FX_FLOAT moduleSize, |
| 141 int32_t& e) { | 141 int32_t& e) { |
| 142 int32_t tltrCentersDimension = Round( | 142 int32_t tltrCentersDimension = Round( |
| 143 CBC_QRFinderPatternFinder::Distance(topLeft, topRight) / moduleSize); | 143 CBC_QRFinderPatternFinder::Distance(topLeft, topRight) / moduleSize); |
| 144 int32_t tlblCentersDimension = Round( | 144 int32_t tlblCentersDimension = Round( |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 int32_t estAlignmentX, | 256 int32_t estAlignmentX, |
| 257 int32_t estAlignmentY, | 257 int32_t estAlignmentY, |
| 258 FX_FLOAT allowanceFactor, | 258 FX_FLOAT allowanceFactor, |
| 259 int32_t& e) { | 259 int32_t& e) { |
| 260 int32_t allowance = (int32_t)(allowanceFactor * overallEstModuleSize); | 260 int32_t allowance = (int32_t)(allowanceFactor * overallEstModuleSize); |
| 261 int32_t alignmentAreaLeftX = std::max(0, estAlignmentX - allowance); | 261 int32_t alignmentAreaLeftX = std::max(0, estAlignmentX - allowance); |
| 262 int32_t alignmentAreaRightX = | 262 int32_t alignmentAreaRightX = |
| 263 std::min(m_image->GetWidth() - 1, estAlignmentX + allowance); | 263 std::min(m_image->GetWidth() - 1, estAlignmentX + allowance); |
| 264 if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) { | 264 if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) { |
| 265 e = BCExceptionRead; | 265 e = BCExceptionRead; |
| 266 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 266 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 267 } | 267 } |
| 268 int32_t alignmentAreaTopY = std::max(0, estAlignmentY - allowance); | 268 int32_t alignmentAreaTopY = std::max(0, estAlignmentY - allowance); |
| 269 int32_t alignmentAreaBottomY = | 269 int32_t alignmentAreaBottomY = |
| 270 std::min(m_image->GetHeight() - 1, estAlignmentY + allowance); | 270 std::min(m_image->GetHeight() - 1, estAlignmentY + allowance); |
| 271 CBC_QRAlignmentPatternFinder alignmentFinder( | 271 CBC_QRAlignmentPatternFinder alignmentFinder( |
| 272 m_image, alignmentAreaLeftX, alignmentAreaTopY, | 272 m_image, alignmentAreaLeftX, alignmentAreaTopY, |
| 273 alignmentAreaRightX - alignmentAreaLeftX, | 273 alignmentAreaRightX - alignmentAreaLeftX, |
| 274 alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize); | 274 alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize); |
| 275 CBC_QRAlignmentPattern* qap = alignmentFinder.Find(e); | 275 CBC_QRAlignmentPattern* qap = alignmentFinder.Find(e); |
| 276 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 276 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
| 277 return qap; | 277 return qap; |
| 278 } | 278 } |
| OLD | NEW |