1 #ifndef __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__
2 #define __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__
5 * TransformingMonochromeBitmapSource.h
8 * Created by Christian Brunschen on 03/06/2008.
9 * Copyright 2008 Google Inc. All rights reserved.
13 #include "MonochromeBitmapSource.h"
15 class TransformingMonochromeBitmapSource : public MonochromeBitmapSource {
17 Ref<MonochromeBitmapSource> source_;
21 TransformingMonochromeBitmapSource(Ref<MonochromeBitmapSource> source,
23 MonochromeBitmapSource(),
27 virtual ~TransformingMonochromeBitmapSource() { }
29 virtual size_t getWidth() = 0;
30 virtual size_t getHeight() = 0;
31 virtual unsigned char getPixel(size_t x, size_t y) = 0;
32 virtual Ref<MonochromeBitmapSource> rotateCounterClockwise() = 0;
33 virtual bool isRotateSupported();
41 class TMBS0 : public TransformingMonochromeBitmapSource {
44 TMBS0(Ref<MonochromeBitmapSource> source, float scale) :
45 TransformingMonochromeBitmapSource(source, scale) { }
46 virtual size_t getWidth() { return source_->getWidth() / scale_; }
47 virtual size_t getHeight() { return source_->getHeight() / scale_; }
48 virtual unsigned char getPixel(size_t x, size_t y) {
49 return source_->getPixel(x * scale_, y * scale_);
51 virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
54 class TMBS90 : public TransformingMonochromeBitmapSource {
58 TMBS90(Ref<MonochromeBitmapSource> source, float scale) :
59 TransformingMonochromeBitmapSource(source, scale),
60 xOffset_(source->getHeight() - 1) { }
61 virtual size_t getWidth() { return source_->getHeight() / scale_; }
62 virtual size_t getHeight() { return source_->getWidth() / scale_; }
63 virtual unsigned char getPixel(size_t x, size_t y) {
64 size_t sourceX = y * scale_;
65 size_t sourceY = xOffset_ - x * scale_;
66 //cout << "tmbs90: (" << x << "," << y << ") => (" << sourceX << "," << sourceY << ")\n";
67 return source_->getPixel(sourceX, sourceY);
69 virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
72 class TMBS180 : public TransformingMonochromeBitmapSource {
77 TMBS180(Ref<MonochromeBitmapSource> source, float scale) :
78 TransformingMonochromeBitmapSource(source, scale),
79 xOffset_(source->getWidth() - 1),
80 yOffset_(source->getHeight() - 1) { }
81 virtual size_t getWidth() { return source_->getWidth() / scale_; }
82 virtual size_t getHeight() { return source_->getHeight() / scale_; }
83 virtual unsigned char getPixel(size_t x, size_t y) {
84 size_t sourceX = xOffset_ - x * scale_;
85 size_t sourceY = yOffset_ - y * scale_;
86 //cout << "tmbs180: (" << x << "," << y << ") => (" << sourceX << "," << sourceY << ")\n";
87 return source_->getPixel(sourceX, sourceY);
89 virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
92 class TMBS270 : public TransformingMonochromeBitmapSource {
96 TMBS270(Ref<MonochromeBitmapSource> source, float scale) :
97 TransformingMonochromeBitmapSource(source, scale),
98 yOffset_(source->getWidth() - 1) { }
99 virtual size_t getWidth() { return source_->getHeight() / scale_; }
100 virtual size_t getHeight() { return source_->getWidth() / scale_; }
101 virtual unsigned char getPixel(size_t x, size_t y) {
102 return source_->getPixel(yOffset_ - y * scale_, x * scale_);
104 virtual Ref<MonochromeBitmapSource> rotateCounterClockwise();
107 #endif // __TRANSFORMING_MONCHROME_BITMAP_SOURCE_H__