mirror of
https://github.com/zxing/zxing.git
synced 2025-02-21 02:55:27 -08:00
git-svn-id: https://zxing.googlecode.com/svn/trunk@455 59b500cc-1b3d-0410-9834-0bbf25fbcc57
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 ZXing authors 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__
|