diff --git a/cpp/core/src/zxing/Binarizer.cpp b/cpp/core/src/zxing/Binarizer.cpp index adaab0556..190138291 100644 --- a/cpp/core/src/zxing/Binarizer.cpp +++ b/cpp/core/src/zxing/Binarizer.cpp @@ -23,15 +23,17 @@ namespace zxing { - Binarizer::Binarizer(Ref source) : source_(source), array_(NULL), matrix_(NULL) { + Binarizer::Binarizer(Ref source) : source_(source), array_(NULL), matrix_(NULL), cached_y_(-1) { } Binarizer::~Binarizer() { } Ref Binarizer::getBlackRow(int y, Ref row){ - if (array_ == NULL) + if (array_ == NULL && cached_y_ != y) { array_ = estimateBlackRow(y, row); + cached_y_ = y; + } return array_; } diff --git a/cpp/core/src/zxing/Binarizer.h b/cpp/core/src/zxing/Binarizer.h index 225ec7dce..694018d72 100644 --- a/cpp/core/src/zxing/Binarizer.h +++ b/cpp/core/src/zxing/Binarizer.h @@ -34,6 +34,7 @@ class Binarizer : public Counted { Ref source_; Ref array_; Ref matrix_; + int cached_y_; public: Binarizer(Ref source); diff --git a/cpp/core/src/zxing/BinaryBitmap.cpp b/cpp/core/src/zxing/BinaryBitmap.cpp index c8fea36e4..ff79b55d5 100644 --- a/cpp/core/src/zxing/BinaryBitmap.cpp +++ b/cpp/core/src/zxing/BinaryBitmap.cpp @@ -23,7 +23,7 @@ namespace zxing { - BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer) { + BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer), cached_y_(-1) { } @@ -31,8 +31,9 @@ namespace zxing { } Ref BinaryBitmap::getBlackRow(int y, Ref row) { - if (array_bits_ == NULL) { + if (array_bits_ == NULL && cached_y_ != y) { array_bits_ = binarizer_->getBlackRow(y, row); + cached_y_ = y; } return array_bits_; } diff --git a/cpp/core/src/zxing/BinaryBitmap.h b/cpp/core/src/zxing/BinaryBitmap.h index ecd9a8549..ddea910c1 100644 --- a/cpp/core/src/zxing/BinaryBitmap.h +++ b/cpp/core/src/zxing/BinaryBitmap.h @@ -33,6 +33,7 @@ namespace zxing { Ref bits_; Ref array_bits_; Ref binarizer_; + int cached_y_; public: BinaryBitmap(Ref binarizer);