mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
108 lines
3.6 KiB
C
108 lines
3.6 KiB
C
|
#ifndef __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__
|
||
|
#define __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__
|
||
|
|
||
|
/*
|
||
|
* TransformingMonochromeBitmapSource.h
|
||
|
* ZXing
|
||
|
*
|
||
|
* Created by Christian Brunschen on 03/06/2008.
|
||
|
* Copyright 2008 Google Inc. All rights reserved.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "MonochromeBitmapSource.h"
|
||
|
|
||
|
class TransformingMonochromeBitmapSource : public MonochromeBitmapSource {
|
||
|
protected:
|
||
|
Ref<MonochromeBitmapSource> source_;
|
||
|
float scale_;
|
||
|
|
||
|
public:
|
||
|
TransformingMonochromeBitmapSource(Ref<MonochromeBitmapSource> source,
|
||
|
float scale) :
|
||
|
MonochromeBitmapSource(),
|
||
|
source_(source),
|
||
|
scale_(scale) { }
|
||
|
|
||
|
virtual ~TransformingMonochromeBitmapSource() { }
|
||
|
|
||
|
virtual size_t getWidth() = 0;
|
||
|
virtual size_t getHeight() = 0;
|
||
|
virtual unsigned char getPixel(size_t x, size_t y) = 0;
|
||
|
virtual Ref<MonochromeBitmapSource> rotateCounterClockwise() = 0;
|
||
|
virtual bool isRotateSupported();
|
||
|
};
|
||
|
|
||
|
class TMBS0;
|
||
|
class TMBS90;
|
||
|
class TMBS180;
|
||
|
class TMBS270;
|
||
|
|
||
|
class TMBS0 : public TransformingMonochromeBitmapSource {
|
||
|
private:
|
||
|
public:
|
||
|
TMBS0(Ref<MonochromeBitmapSource> source, float scale) :
|
||
|
TransformingMonochromeBitmapSource(source, scale) { }
|
||
|
virtual size_t getWidth() { return source_->getWidth() / scale_; }
|
||
|
virtual size_t getHeight() { return source_->getHeight() / scale_; }
|
||
|
virtual unsigned char getPixel(size_t x, size_t y) {
|
||
|
return source_->getPixel(x * scale_, y * scale_);
|
||
|
}
|
||
|
virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
|
||
|
};
|
||
|
|
||
|
class TMBS90 : public TransformingMonochromeBitmapSource {
|
||
|
private:
|
||
|
size_t xOffset_;
|
||
|
public:
|
||
|
TMBS90(Ref<MonochromeBitmapSource> source, float scale) :
|
||
|
TransformingMonochromeBitmapSource(source, scale),
|
||
|
xOffset_(source->getHeight() - 1) { }
|
||
|
virtual size_t getWidth() { return source_->getHeight() / scale_; }
|
||
|
virtual size_t getHeight() { return source_->getWidth() / scale_; }
|
||
|
virtual unsigned char getPixel(size_t x, size_t y) {
|
||
|
size_t sourceX = y * scale_;
|
||
|
size_t sourceY = xOffset_ - x * scale_;
|
||
|
//cout << "tmbs90: (" << x << "," << y << ") => (" << sourceX << "," << sourceY << ")\n";
|
||
|
return source_->getPixel(sourceX, sourceY);
|
||
|
}
|
||
|
virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
|
||
|
};
|
||
|
|
||
|
class TMBS180 : public TransformingMonochromeBitmapSource {
|
||
|
private:
|
||
|
size_t xOffset_;
|
||
|
size_t yOffset_;
|
||
|
public:
|
||
|
TMBS180(Ref<MonochromeBitmapSource> source, float scale) :
|
||
|
TransformingMonochromeBitmapSource(source, scale),
|
||
|
xOffset_(source->getWidth() - 1),
|
||
|
yOffset_(source->getHeight() - 1) { }
|
||
|
virtual size_t getWidth() { return source_->getWidth() / scale_; }
|
||
|
virtual size_t getHeight() { return source_->getHeight() / scale_; }
|
||
|
virtual unsigned char getPixel(size_t x, size_t y) {
|
||
|
size_t sourceX = xOffset_ - x * scale_;
|
||
|
size_t sourceY = yOffset_ - y * scale_;
|
||
|
//cout << "tmbs180: (" << x << "," << y << ") => (" << sourceX << "," << sourceY << ")\n";
|
||
|
return source_->getPixel(sourceX, sourceY);
|
||
|
}
|
||
|
virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
|
||
|
};
|
||
|
|
||
|
class TMBS270 : public TransformingMonochromeBitmapSource {
|
||
|
private:
|
||
|
size_t yOffset_;
|
||
|
public:
|
||
|
TMBS270(Ref<MonochromeBitmapSource> source, float scale) :
|
||
|
TransformingMonochromeBitmapSource(source, scale),
|
||
|
yOffset_(source->getWidth() - 1) { }
|
||
|
virtual size_t getWidth() { return source_->getHeight() / scale_; }
|
||
|
virtual size_t getHeight() { return source_->getWidth() / scale_; }
|
||
|
virtual unsigned char getPixel(size_t x, size_t y) {
|
||
|
return source_->getPixel(yOffset_ - y * scale_, x * scale_);
|
||
|
}
|
||
|
virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
|
||
|
};
|
||
|
|
||
|
#endif // __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__
|