C++ port Binarizer and BinaryBitmap weren't caching rows correctly.

git-svn-id: https://zxing.googlecode.com/svn/trunk@1473 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
flyashi 2010-07-09 15:15:01 +00:00
parent b1032ceba4
commit ecbf50da87
4 changed files with 9 additions and 4 deletions

View file

@ -23,15 +23,17 @@
namespace zxing { namespace zxing {
Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source), array_(NULL), matrix_(NULL) { Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source), array_(NULL), matrix_(NULL), cached_y_(-1) {
} }
Binarizer::~Binarizer() { Binarizer::~Binarizer() {
} }
Ref<BitArray> Binarizer::getBlackRow(int y, Ref<BitArray> row){ Ref<BitArray> Binarizer::getBlackRow(int y, Ref<BitArray> row){
if (array_ == NULL) if (array_ == NULL && cached_y_ != y) {
array_ = estimateBlackRow(y, row); array_ = estimateBlackRow(y, row);
cached_y_ = y;
}
return array_; return array_;
} }

View file

@ -34,6 +34,7 @@ class Binarizer : public Counted {
Ref<LuminanceSource> source_; Ref<LuminanceSource> source_;
Ref<BitArray> array_; Ref<BitArray> array_;
Ref<BitMatrix> matrix_; Ref<BitMatrix> matrix_;
int cached_y_;
public: public:
Binarizer(Ref<LuminanceSource> source); Binarizer(Ref<LuminanceSource> source);

View file

@ -23,7 +23,7 @@
namespace zxing { namespace zxing {
BinaryBitmap::BinaryBitmap(Ref<Binarizer> binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer) { BinaryBitmap::BinaryBitmap(Ref<Binarizer> binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer), cached_y_(-1) {
} }
@ -31,8 +31,9 @@ namespace zxing {
} }
Ref<BitArray> BinaryBitmap::getBlackRow(int y, Ref<BitArray> row) { Ref<BitArray> BinaryBitmap::getBlackRow(int y, Ref<BitArray> row) {
if (array_bits_ == NULL) { if (array_bits_ == NULL && cached_y_ != y) {
array_bits_ = binarizer_->getBlackRow(y, row); array_bits_ = binarizer_->getBlackRow(y, row);
cached_y_ = y;
} }
return array_bits_; return array_bits_;
} }

View file

@ -33,6 +33,7 @@ namespace zxing {
Ref<BitMatrix> bits_; Ref<BitMatrix> bits_;
Ref<BitArray> array_bits_; Ref<BitArray> array_bits_;
Ref<Binarizer> binarizer_; Ref<Binarizer> binarizer_;
int cached_y_;
public: public:
BinaryBitmap(Ref<Binarizer> binarizer); BinaryBitmap(Ref<Binarizer> binarizer);