From 8b76fbb408f8eedab24195655c45c891af01eaab Mon Sep 17 00:00:00 2001 From: cathook Date: Wed, 24 Sep 2014 13:37:42 +0800 Subject: Big change, detail see README. --- doc/html/Bitmap_8h_source.html | 371 ----------------------------------------- 1 file changed, 371 deletions(-) delete mode 100644 doc/html/Bitmap_8h_source.html (limited to 'doc/html/Bitmap_8h_source.html') diff --git a/doc/html/Bitmap_8h_source.html b/doc/html/Bitmap_8h_source.html deleted file mode 100644 index 0c002a4..0000000 --- a/doc/html/Bitmap_8h_source.html +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - - -Templates -- Meow: meowpp/gra/Bitmap.h Source File - - - - - - - - - - - -
-
- - - - - - - -
-
Templates -- Meow -  1.2.11 -
-
A C++ template contains kinds of interesting classes and functions
-
-
- - -
-
- -
-
-
- -
-
-
-
Bitmap.h
-
-
-Go to the documentation of this file.
1 #ifndef gra_Bitmap_H__
-
2 #define gra_Bitmap_H__
-
3 
-
4 #include "../math/utility.h"
-
5 #include "../math/Matrix.h"
-
6 
-
7 #include "../oo/ObjBase.h"
-
8 
-
9 #include <vector>
-
10 #include <cmath>
-
11 #include <string>
-
12 #include <typeinfo>
-
13 #include <cstdlib>
-
14 
-
15 namespace meow {
-
16 
-
17 const unsigned int kBitmapReadWritePixels = 0x1;
-
18 
-
24 template<class Pixel>
-
25 class Bitmap: public ObjBase {
-
26 private:
-
27  Matrix<Pixel> matrix_;
-
28 
-
30  static std::vector<double> gaussianFactor1(double sigma) {
-
31  double sigma2 = squ(sigma);
-
32  size_t width = std::max(ceil((double)(sigma * 2)), 0.0);
-
33  std::vector<double> factor(width + 1 + width);
-
34  for (size_t x = 0; x < width; x++) {
-
35  double e = exp(-(squ((double)x)) / (2.0 * sigma2));
-
36  factor[width - x - 1] = e;
-
37  factor[width + x + 1] = e;
-
38  }
-
39  factor[width] = 1.0;
-
40  return factor;
-
41  }
-
42 
-
44  static std::vector<double> gradianceFactor1(double sigma) {
-
45  double sigma2 = squ(sigma), ss = sigma * 2;
-
46  size_t width = std::max(ceil(ss), 1.0);
-
47  std::vector<double> factor(width + 1 + width);
-
48  for (size_t x = 0; x < width; x++) {
-
49  double e = exp(-(squ((double)x)) / (2.0 * sigma2));
-
50  factor[width - x - 1] = (double)x * e;
-
51  factor[width + x + 1] = -(double)x * e;
-
52  }
-
53  factor[width] = 0.0;
-
54  return factor;
-
55  }
-
56 
-
58  Bitmap xyBlur(std::vector<double> const& factor,
-
59  ssize_t dx, ssize_t dy) const {
-
60  if (factor.size() <= 1)
-
61  return *this;
-
62  Bitmap ret(height(), width(), Pixel(0));
-
63  ssize_t w = factor.size() / 2;
-
64  for (size_t y = 0, Y = height(); y < Y; y++)
-
65  for (size_t x = 0, X = width(); x < X; x++) {
-
66  Pixel sum(0);
-
67  double fsum(0);
-
68  for (ssize_t i = -w; i <= w; i++) {
-
69  ssize_t x2 = (ssize_t)x + dx * i;
-
70  ssize_t y2 = (ssize_t)y + dy * i;
-
71  if (0 <= x2 && x2 < (ssize_t)X && 0 <= y2 && y2 < (ssize_t)Y) {
-
72  sum = sum + pixel(y2, x2) * factor[i + w];
-
73  fsum = fsum + fabs(factor[i + w]);
-
74  }
-
75  }
-
76  ret.pixel(y, x, sum / fsum);
-
77  }
-
78  return ret;
-
79  }
-
80 public:
-
84  Bitmap() {
-
85  }
-
86 
-
90  Bitmap(Bitmap const& b): matrix_(b.matrix_) {
-
91  }
-
92 
-
96  Bitmap(Matrix<Pixel> const& b): matrix_(b) {
-
97  }
-
98 
-
106  Bitmap(size_t h, size_t w, Pixel const& p): matrix_(h, w, p) {
-
107  }
-
108 
- -
113  }
-
114 
-
118  Bitmap& copyFrom(Bitmap const& b) {
-
119  matrix_.copyFrom(b.matrix_);
-
120  return *this;
-
121  }
-
122 
- -
127  matrix_.referenceFrom(b.matrix_);
-
128  return *this;
-
129  }
-
130 
-
139  void reset(size_t h, size_t w, Pixel const& p) {
-
140  matrix_.reset(h, w, p);
-
141  }
-
142 
-
146  void clear() {
-
147  matrix_.clear();
-
148  }
-
149 
-
153  size_t height() const {
-
154  return matrix_.rows();
-
155  }
-
156 
-
160  size_t width() const {
-
161  return matrix_.cols();
-
162  }
-
163 
-
167  size_t size() const {
-
168  return matrix_.size();
-
169  }
-
170 
-
178  size_t height(size_t h2, Pixel const& p) {
-
179  return matrix_.rows(h2, p);
-
180  }
-
181 
-
189  size_t width(size_t w2, Pixel const& p) {
-
190  return matrix_.cols(w2, p);
-
191  }
-
192 
-
201  size_t size(size_t h2, size_t w2, Pixel const& p) {
-
202  return matrix_.size(h2, w2, p);
-
203  }
-
204 
-
212  Pixel pixel(size_t y, size_t x) const {
-
213  return matrix_.entry(y, x);
-
214  }
-
215 
-
224  Pixel pixel(size_t y, size_t x, Pixel const& p) {
-
225  return matrix_.entry(y, x, p);
-
226  }
-
227 
-
240  void pixels(ssize_t yFirst, ssize_t yLast,
-
241  ssize_t xFirst, ssize_t xLast,
-
242  Pixel const& p) {
-
243  return matrix_.entries(yFirst, yLast, xFirst, xLast, p);
-
244  }
-
245 
- -
250  return matrix_;
-
251  }
-
252 
- -
257  return matrix_;
-
258  }
-
259 
- -
264  matrix_.copyFrom(p);
-
265  return matrix();
-
266  }
-
267 
-
275  Bitmap gaussian(double radiusY, double radiusX) const {
-
276  return (xyBlur(gaussianFactor1(radiusY), 1, 0).
-
277  xyBlur(gaussianFactor1(radiusX), 0, 1));
-
278  }
-
279 
-
287  Bitmap& gaussianed(double radiusY, double radiusX) {
-
288  return copyFrom(gaussian(radiusY, radiusX));
-
289  }
-
290 
-
298  Bitmap gradianceX(double radiusY, double radiusX) const {
-
299  return (xyBlur(gaussianFactor1(radiusY), 1, 0).
-
300  xyBlur(gradianceFactor1(radiusX), 0, 1));
-
301  }
-
302 
-
310  Bitmap<Pixel>& gradiancedX(double radiusY, double radiusX) {
-
311  return copyFrom(gradianceX(radiusY, radiusX));
-
312  }
-
313 
-
321  Bitmap<Pixel> gradianceY (double radiusY, double radiusX) const {
-
322  return (xyBlur(gaussianFactor1(radiusX), 0, 1).
-
323  xyBlur(gradianceFactor1(radiusY), 1, 0));
-
324  }
-
325 
-
333  Bitmap<Pixel>& gradiancedY(double radiusY, double radiusX) {
-
334  return copyFrom(gradianceY(radiusY, radiusX));
-
335  }
-
336 
-
340  Bitmap& operator=(Bitmap const& b) {
-
341  return copyFrom(b);
-
342  }
-
343 
-
347  Pixel operator()(size_t y, size_t x) const {
-
348  return pixel(y, x);
-
349  }
-
350 
-
354  Pixel const& operator()(size_t y, size_t x, Pixel const& p) const {
-
355  return pixel(y, x, p);
-
356  }
-
357 
-
362  bool write(FILE* f, bool bin, unsigned int fg) const {
-
363  if (fg & kBitmapReadWritePixels)
-
364  return false;
-
365  if (bin) {
-
366  long tmp;
-
367  if (fwrite(&(tmp = matrix_.cols()), sizeof(tmp), 1, f) < 1) return false;
-
368  if (fwrite(&(tmp = matrix_.rows()), sizeof(tmp), 1, f) < 1) return false;
-
369  }
-
370  else {
-
371  if (fprintf(f, "%ld %ld\n", (long)matrix_.cols(), (long)matrix_.rows())
-
372  < 2) return false;
-
373  }
-
374  return true;
-
375  }
-
376 
-
381  bool read(FILE* f, bool bin, unsigned int fg) {
-
382  if (fg & kBitmapReadWritePixels)
-
383  return false;
-
384  long tmp1, tmp2;
-
385  if (bin) {
-
386  if (fread(&tmp1, sizeof(tmp1), 1, f) < 1) return false;
-
387  if (fread(&tmp2, sizeof(tmp2), 1, f) < 1) return false;
-
388  }
-
389  else {
-
390  if (fscanf(f, "%ld %ld", &tmp1, &tmp2) < 2) return false;
-
391  }
-
392  matrix_.size(tmp1, tmp2, Pixel(0));
-
393  return true;
-
394  }
-
395 
-
400  ObjBase* create() const {
-
401  return new Bitmap();
-
402  }
-
403 
-
413  ObjBase* copyFrom(ObjBase const* b) {
-
414  return &(copyFrom(*(Bitmap const*)b));
-
415  }
-
416 
-
421  char const* ctype() const{
-
422  return typeid(*this).name();
-
423  }
-
424 
-
429  std::string type() const {
-
430  return std::string(ctype());
-
431  }
-
432 };
-
433 
-
434 
-
435 } // meow
-
436 
-
437 #endif // gra_Bitmap_H__
-
Bitmap< Pixel > gradianceY(double radiusY, double radiusX) const
回傳對y偏微分
Definition: Bitmap.h:321
-
ObjBase * copyFrom(ObjBase const *b)
複製資料
Definition: Bitmap.h:413
-
void pixels(ssize_t yFirst, ssize_t yLast, ssize_t xFirst, ssize_t xLast, Pixel const &p)
區塊修改
Definition: Bitmap.h:240
-
Bitmap(size_t h, size_t w, Pixel const &p)
constructor, 指定寬高, 預設Pixel
Definition: Bitmap.h:106
-
size_t size(size_t h2, size_t w2, Pixel const &p)
修改寬高
Definition: Bitmap.h:201
-
Matrix & referenceFrom(Matrix const &m)
reference
Definition: Matrix.h:110
-
Pixel operator()(size_t y, size_t x) const
same as pixel(y, x)
Definition: Bitmap.h:347
-
size_t height() const
回傳高度
Definition: Bitmap.h:153
-
size_t rows() const
Return number of rows.
Definition: Matrix.h:129
-
void clear()
清除資料, 寬高階規零
Definition: Bitmap.h:146
-
Pixel const & operator()(size_t y, size_t x, Pixel const &p) const
same as pixel(y, x, p)
Definition: Bitmap.h:354
-
const unsigned int kBitmapReadWritePixels
Definition: Bitmap.h:17
-
char const * ctype() const
回傳class的type
Definition: Bitmap.h:421
-
Bitmap & operator=(Bitmap const &b)
same as copyFrom(b)
Definition: Bitmap.h:340
-
Bitmap gaussian(double radiusY, double radiusX) const
回傳高斯模糊
Definition: Bitmap.h:275
-
size_t cols() const
Return number of cols.
Definition: Matrix.h:134
- -
Bitmap()
constructor, 產生一個空的Bitmap
Definition: Bitmap.h:84
-
Matrix< Pixel > matrix() const
回傳矩陣形式
Definition: Bitmap.h:249
-
Bitmap(Bitmap const &b)
constructor, 複製一個bitmap
Definition: Bitmap.h:90
-
Matrix< Pixel > matrix(Matrix< Pixel > const &p)
直接設定
Definition: Bitmap.h:263
-
二維點陣資料
Definition: Bitmap.h:25
-
bool read(FILE *f, bool bin, unsigned int fg)
將資料讀入
Definition: Bitmap.h:381
-
Matrix< Pixel > & matrixGet()
回傳矩陣形式 (non-constant form)
Definition: Bitmap.h:256
-
Pixel pixel(size_t y, size_t x) const
取得 (y, x) 的pixel
Definition: Bitmap.h:212
-
size_t width() const
回傳寬度
Definition: Bitmap.h:160
-
bool write(FILE *f, bool bin, unsigned int fg) const
將資料寫入檔案
Definition: Bitmap.h:362
-
Matrix & copyFrom(Matrix const &m)
copy
Definition: Matrix.h:97
-
一切物件的Base, 並要求每個物件都要有read, write, create, ... 等功能
Definition: ObjBase.h:15
-
Bitmap & copyFrom(Bitmap const &b)
複製
Definition: Bitmap.h:118
-
void entries(ssize_t rFirst, ssize_t rLast, ssize_t cFirst, ssize_t cLast, Entry const &e)
Change the entries from rFirst x cFirst to rLast x cLast.
Definition: Matrix.h:237
-
size_t size() const
Return number of rows times number of cols.
Definition: Matrix.h:139
-
size_t size() const
回傳高度乘以寬度
Definition: Bitmap.h:167
-
void clear()
free the memory
Definition: Matrix.h:204
-
Pixel pixel(size_t y, size_t x, Pixel const &p)
修改 (y, x) 的pixel
Definition: Bitmap.h:224
-
~Bitmap()
destructor
Definition: Bitmap.h:112
-
Bitmap gradianceX(double radiusY, double radiusX) const
回傳對x偏微分
Definition: Bitmap.h:298
-
size_t width(size_t w2, Pixel const &p)
修改寬度
Definition: Bitmap.h:189
-
Bitmap(Matrix< Pixel > const &b)
constructor, copy data from a matrix
Definition: Bitmap.h:96
- -
void reset(size_t h, size_t w, Pixel const &p)
全部重設
Definition: Bitmap.h:139
-
std::string type() const
回傳class的type
Definition: Bitmap.h:429
-
Bitmap & referenceFrom(Bitmap const &b)
reference
Definition: Bitmap.h:126
-
Entry entry(size_t r, size_t c) const
Access the entry at r x c.
Definition: Matrix.h:212
-
Bitmap< Pixel > & gradiancedX(double radiusY, double radiusX)
把自己對x偏微分
Definition: Bitmap.h:310
-
size_t height(size_t h2, Pixel const &p)
修改高度
Definition: Bitmap.h:178
-
void reset(size_t r, size_t c, Entry const &e)
reset the size of the matrix to r x c with entry all be e
Definition: Matrix.h:116
-
Bitmap & gaussianed(double radiusY, double radiusX)
把自己高斯模糊
Definition: Bitmap.h:287
-
ObjBase * create() const
new一個自己
Definition: Bitmap.h:400
-
T squ(T const &x)
x*x
Definition: utility.h:77
-
Bitmap< Pixel > & gradiancedY(double radiusY, double radiusX)
把自己對y偏微分
Definition: Bitmap.h:333
-
-
- - - - - -- cgit