| 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 2013 ZXing authors | 8 * Copyright 2013 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 int32_t minCodewordWidth, | 63 int32_t minCodewordWidth, |
| 64 int32_t maxCodewordWidth, | 64 int32_t maxCodewordWidth, |
| 65 int32_t& e) { | 65 int32_t& e) { |
| 66 CBC_BoundingBox* boundingBox = new CBC_BoundingBox( | 66 CBC_BoundingBox* boundingBox = new CBC_BoundingBox( |
| 67 image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, e); | 67 image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, e); |
| 68 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 68 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
| 69 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn = NULL; | 69 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn = NULL; |
| 70 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn = NULL; | 70 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn = NULL; |
| 71 CBC_DetectionResult* detectionResult = NULL; | 71 CBC_DetectionResult* detectionResult = NULL; |
| 72 for (int32_t i = 0; i < 2; i++) { | 72 for (int32_t i = 0; i < 2; i++) { |
| 73 if (imageTopLeft != NULL) { | 73 if (imageTopLeft) { |
| 74 leftRowIndicatorColumn = | 74 leftRowIndicatorColumn = |
| 75 getRowIndicatorColumn(image, boundingBox, *imageTopLeft, TRUE, | 75 getRowIndicatorColumn(image, boundingBox, *imageTopLeft, TRUE, |
| 76 minCodewordWidth, maxCodewordWidth); | 76 minCodewordWidth, maxCodewordWidth); |
| 77 } | 77 } |
| 78 if (imageTopRight != NULL) { | 78 if (imageTopRight) { |
| 79 rightRowIndicatorColumn = | 79 rightRowIndicatorColumn = |
| 80 getRowIndicatorColumn(image, boundingBox, *imageTopRight, FALSE, | 80 getRowIndicatorColumn(image, boundingBox, *imageTopRight, FALSE, |
| 81 minCodewordWidth, maxCodewordWidth); | 81 minCodewordWidth, maxCodewordWidth); |
| 82 } | 82 } |
| 83 detectionResult = merge(leftRowIndicatorColumn, rightRowIndicatorColumn, e); | 83 detectionResult = merge(leftRowIndicatorColumn, rightRowIndicatorColumn, e); |
| 84 if (e != BCExceptionNO) { | 84 if (e != BCExceptionNO) { |
| 85 e = BCExceptiontNotFoundInstance; | 85 e = BCExceptiontNotFoundInstance; |
| 86 delete leftRowIndicatorColumn; | 86 delete leftRowIndicatorColumn; |
| 87 delete rightRowIndicatorColumn; | 87 delete rightRowIndicatorColumn; |
| 88 delete boundingBox; | 88 delete boundingBox; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 101 } | 101 } |
| 102 int32_t maxBarcodeColumn = detectionResult->getBarcodeColumnCount() + 1; | 102 int32_t maxBarcodeColumn = detectionResult->getBarcodeColumnCount() + 1; |
| 103 detectionResult->setDetectionResultColumn(0, leftRowIndicatorColumn); | 103 detectionResult->setDetectionResultColumn(0, leftRowIndicatorColumn); |
| 104 detectionResult->setDetectionResultColumn(maxBarcodeColumn, | 104 detectionResult->setDetectionResultColumn(maxBarcodeColumn, |
| 105 rightRowIndicatorColumn); | 105 rightRowIndicatorColumn); |
| 106 FX_BOOL leftToRight = leftRowIndicatorColumn != NULL; | 106 FX_BOOL leftToRight = leftRowIndicatorColumn != NULL; |
| 107 for (int32_t barcodeColumnCount = 1; barcodeColumnCount <= maxBarcodeColumn; | 107 for (int32_t barcodeColumnCount = 1; barcodeColumnCount <= maxBarcodeColumn; |
| 108 barcodeColumnCount++) { | 108 barcodeColumnCount++) { |
| 109 int32_t barcodeColumn = leftToRight ? barcodeColumnCount | 109 int32_t barcodeColumn = leftToRight ? barcodeColumnCount |
| 110 : maxBarcodeColumn - barcodeColumnCount; | 110 : maxBarcodeColumn - barcodeColumnCount; |
| 111 if (detectionResult->getDetectionResultColumn(barcodeColumn) != NULL) { | 111 if (detectionResult->getDetectionResultColumn(barcodeColumn)) { |
| 112 continue; | 112 continue; |
| 113 } | 113 } |
| 114 CBC_DetectionResultColumn* detectionResultColumn = NULL; | 114 CBC_DetectionResultColumn* detectionResultColumn = NULL; |
| 115 if (barcodeColumn == 0 || barcodeColumn == maxBarcodeColumn) { | 115 if (barcodeColumn == 0 || barcodeColumn == maxBarcodeColumn) { |
| 116 detectionResultColumn = new CBC_DetectionResultRowIndicatorColumn( | 116 detectionResultColumn = new CBC_DetectionResultRowIndicatorColumn( |
| 117 boundingBox, barcodeColumn == 0); | 117 boundingBox, barcodeColumn == 0); |
| 118 } else { | 118 } else { |
| 119 detectionResultColumn = new CBC_DetectionResultColumn(boundingBox); | 119 detectionResultColumn = new CBC_DetectionResultColumn(boundingBox); |
| 120 } | 120 } |
| 121 detectionResult->setDetectionResultColumn(barcodeColumn, | 121 detectionResult->setDetectionResultColumn(barcodeColumn, |
| 122 detectionResultColumn); | 122 detectionResultColumn); |
| 123 int32_t startColumn = -1; | 123 int32_t startColumn = -1; |
| 124 int32_t previousStartColumn = startColumn; | 124 int32_t previousStartColumn = startColumn; |
| 125 for (int32_t imageRow = boundingBox->getMinY(); | 125 for (int32_t imageRow = boundingBox->getMinY(); |
| 126 imageRow <= boundingBox->getMaxY(); imageRow++) { | 126 imageRow <= boundingBox->getMaxY(); imageRow++) { |
| 127 startColumn = | 127 startColumn = |
| 128 getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight); | 128 getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight); |
| 129 if (startColumn < 0 || startColumn > boundingBox->getMaxX()) { | 129 if (startColumn < 0 || startColumn > boundingBox->getMaxX()) { |
| 130 if (previousStartColumn == -1) { | 130 if (previousStartColumn == -1) { |
| 131 continue; | 131 continue; |
| 132 } | 132 } |
| 133 startColumn = previousStartColumn; | 133 startColumn = previousStartColumn; |
| 134 } | 134 } |
| 135 CBC_Codeword* codeword = detectCodeword( | 135 CBC_Codeword* codeword = detectCodeword( |
| 136 image, boundingBox->getMinX(), boundingBox->getMaxX(), leftToRight, | 136 image, boundingBox->getMinX(), boundingBox->getMaxX(), leftToRight, |
| 137 startColumn, imageRow, minCodewordWidth, maxCodewordWidth); | 137 startColumn, imageRow, minCodewordWidth, maxCodewordWidth); |
| 138 if (codeword != NULL) { | 138 if (codeword) { |
| 139 detectionResultColumn->setCodeword(imageRow, codeword); | 139 detectionResultColumn->setCodeword(imageRow, codeword); |
| 140 previousStartColumn = startColumn; | 140 previousStartColumn = startColumn; |
| 141 minCodewordWidth = minCodewordWidth < codeword->getWidth() | 141 minCodewordWidth = minCodewordWidth < codeword->getWidth() |
| 142 ? minCodewordWidth | 142 ? minCodewordWidth |
| 143 : codeword->getWidth(); | 143 : codeword->getWidth(); |
| 144 maxCodewordWidth = maxCodewordWidth > codeword->getWidth() | 144 maxCodewordWidth = maxCodewordWidth > codeword->getWidth() |
| 145 ? maxCodewordWidth | 145 ? maxCodewordWidth |
| 146 : codeword->getWidth(); | 146 : codeword->getWidth(); |
| 147 } | 147 } |
| 148 } | 148 } |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 for (int32_t i = 0; i < 2; i++) { | 303 for (int32_t i = 0; i < 2; i++) { |
| 304 int32_t increment = i == 0 ? 1 : -1; | 304 int32_t increment = i == 0 ? 1 : -1; |
| 305 int32_t startColumn = (int32_t)startPoint.GetX(); | 305 int32_t startColumn = (int32_t)startPoint.GetX(); |
| 306 for (int32_t imageRow = (int32_t)startPoint.GetY(); | 306 for (int32_t imageRow = (int32_t)startPoint.GetY(); |
| 307 imageRow <= boundingBox->getMaxY() && | 307 imageRow <= boundingBox->getMaxY() && |
| 308 imageRow >= boundingBox->getMinY(); | 308 imageRow >= boundingBox->getMinY(); |
| 309 imageRow += increment) { | 309 imageRow += increment) { |
| 310 CBC_Codeword* codeword = | 310 CBC_Codeword* codeword = |
| 311 detectCodeword(image, 0, image->GetWidth(), leftToRight, startColumn, | 311 detectCodeword(image, 0, image->GetWidth(), leftToRight, startColumn, |
| 312 imageRow, minCodewordWidth, maxCodewordWidth); | 312 imageRow, minCodewordWidth, maxCodewordWidth); |
| 313 if (codeword != NULL) { | 313 if (codeword) { |
| 314 rowIndicatorColumn->setCodeword(imageRow, codeword); | 314 rowIndicatorColumn->setCodeword(imageRow, codeword); |
| 315 if (leftToRight) { | 315 if (leftToRight) { |
| 316 startColumn = codeword->getStartX(); | 316 startColumn = codeword->getStartX(); |
| 317 } else { | 317 } else { |
| 318 startColumn = codeword->getEndX(); | 318 startColumn = codeword->getEndX(); |
| 319 } | 319 } |
| 320 } | 320 } |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 return rowIndicatorColumn; | 323 return rowIndicatorColumn; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 CBC_DetectionResult* detectionResult, | 508 CBC_DetectionResult* detectionResult, |
| 509 int32_t barcodeColumn, | 509 int32_t barcodeColumn, |
| 510 int32_t imageRow, | 510 int32_t imageRow, |
| 511 FX_BOOL leftToRight) { | 511 FX_BOOL leftToRight) { |
| 512 int32_t offset = leftToRight ? 1 : -1; | 512 int32_t offset = leftToRight ? 1 : -1; |
| 513 CBC_Codeword* codeword = NULL; | 513 CBC_Codeword* codeword = NULL; |
| 514 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { | 514 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { |
| 515 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) | 515 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) |
| 516 ->getCodeword(imageRow); | 516 ->getCodeword(imageRow); |
| 517 } | 517 } |
| 518 if (codeword != NULL) { | 518 if (codeword) { |
| 519 return leftToRight ? codeword->getEndX() : codeword->getStartX(); | 519 return leftToRight ? codeword->getEndX() : codeword->getStartX(); |
| 520 } | 520 } |
| 521 codeword = detectionResult->getDetectionResultColumn(barcodeColumn) | 521 codeword = detectionResult->getDetectionResultColumn(barcodeColumn) |
| 522 ->getCodewordNearby(imageRow); | 522 ->getCodewordNearby(imageRow); |
| 523 if (codeword != NULL) { | 523 if (codeword) { |
| 524 return leftToRight ? codeword->getStartX() : codeword->getEndX(); | 524 return leftToRight ? codeword->getStartX() : codeword->getEndX(); |
| 525 } | 525 } |
| 526 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { | 526 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { |
| 527 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) | 527 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) |
| 528 ->getCodewordNearby(imageRow); | 528 ->getCodewordNearby(imageRow); |
| 529 } | 529 } |
| 530 if (codeword != NULL) { | 530 if (codeword) { |
| 531 return leftToRight ? codeword->getEndX() : codeword->getStartX(); | 531 return leftToRight ? codeword->getEndX() : codeword->getStartX(); |
| 532 } | 532 } |
| 533 int32_t skippedColumns = 0; | 533 int32_t skippedColumns = 0; |
| 534 while (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { | 534 while (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { |
| 535 barcodeColumn -= offset; | 535 barcodeColumn -= offset; |
| 536 for (int32_t i = 0; | 536 for (int32_t i = 0; |
| 537 i < detectionResult->getDetectionResultColumn(barcodeColumn) | 537 i < detectionResult->getDetectionResultColumn(barcodeColumn) |
| 538 ->getCodewords() | 538 ->getCodewords() |
| 539 ->GetSize(); | 539 ->GetSize(); |
| 540 i++) { | 540 i++) { |
| 541 CBC_Codeword* previousRowCodeword = | 541 CBC_Codeword* previousRowCodeword = |
| 542 (CBC_Codeword*)detectionResult->getDetectionResultColumn( | 542 (CBC_Codeword*)detectionResult->getDetectionResultColumn( |
| 543 barcodeColumn) | 543 barcodeColumn) |
| 544 ->getCodewords() | 544 ->getCodewords() |
| 545 ->GetAt(i); | 545 ->GetAt(i); |
| 546 if (previousRowCodeword != NULL) { | 546 if (previousRowCodeword) { |
| 547 return (leftToRight ? previousRowCodeword->getEndX() | 547 return (leftToRight ? previousRowCodeword->getEndX() |
| 548 : previousRowCodeword->getStartX()) + | 548 : previousRowCodeword->getStartX()) + |
| 549 offset * skippedColumns * (previousRowCodeword->getEndX() - | 549 offset * skippedColumns * (previousRowCodeword->getEndX() - |
| 550 previousRowCodeword->getStartX()); | 550 previousRowCodeword->getStartX()); |
| 551 } | 551 } |
| 552 } | 552 } |
| 553 skippedColumns++; | 553 skippedColumns++; |
| 554 } | 554 } |
| 555 return leftToRight ? detectionResult->getBoundingBox()->getMinX() | 555 return leftToRight ? detectionResult->getBoundingBox()->getMinX() |
| 556 : detectionResult->getBoundingBox()->getMaxX(); | 556 : detectionResult->getBoundingBox()->getMaxX(); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 int32_t result = getCodewordBucketNumber(*array); | 743 int32_t result = getCodewordBucketNumber(*array); |
| 744 delete array; | 744 delete array; |
| 745 return result; | 745 return result; |
| 746 } | 746 } |
| 747 int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber( | 747 int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber( |
| 748 CFX_Int32Array& moduleBitCount) { | 748 CFX_Int32Array& moduleBitCount) { |
| 749 return (moduleBitCount.GetAt(0) - moduleBitCount.GetAt(2) + | 749 return (moduleBitCount.GetAt(0) - moduleBitCount.GetAt(2) + |
| 750 moduleBitCount.GetAt(4) - moduleBitCount.GetAt(6) + 9) % | 750 moduleBitCount.GetAt(4) - moduleBitCount.GetAt(6) + 9) % |
| 751 9; | 751 9; |
| 752 } | 752 } |
| OLD | NEW |