Assignments
Assignments
image.h
Go to the documentation of this file.
1#ifndef IMAGE_INCLUDED
2#define IMAGE_INCLUDED
3
4#include <stdio.h>
5#include <string>
6#include <stdexcept>
7#include <Util/geometry.h>
8#include "lineSegments.h"
9
10namespace Image
11{
13 class Pixel32
14 {
15 public:
17 unsigned char r;
18
20 unsigned char g;
21
23 unsigned char b;
24
26 unsigned char a;
27
29 Pixel32( void );
30 };
31
32
34 class Image32
35 {
38
41
43 void _assertInBounds( int x , int y ) const;
44 public:
45
47 struct iterator
48 {
49 using iterator_category = std::forward_iterator_tag;
50 using reference = Pixel32 &;
51 using pointer = Pixel32 *;
53 using difference_type = std::ptrdiff_t;
54
55 iterator( void ) : _p(nullptr) {}
56 iterator( Pixel32 *p ) : _p(p) {}
57 bool operator == ( const iterator &it ) const { return _p==it._p; }
58 bool operator != ( const iterator &it ) const { return _p!=it._p; }
59 iterator operator ++( int ){ iterator it = *this ; _p++ ; return it; }
60 iterator &operator ++( void ){ _p++ ; return *this; }
61 Pixel32 &operator * ( void ){ return *_p; }
62 Pixel32 *operator -> ( void ){ return _p; }
63 protected:
64 friend Image32;
66 };
67
69 {
70 using iterator_category = std::forward_iterator_tag;
71 using reference = const Pixel32 &;
72 using pointer = const Pixel32 *;
74 using difference_type = std::ptrdiff_t;
75
76 const_iterator( void ) : _p(nullptr) {}
77 const_iterator( const Pixel32 *p ) : _p(p) {}
78 bool operator == ( const const_iterator &it ) const { return _p==it._p; }
79 bool operator != ( const const_iterator &it ) const { return _p!=it._p; }
80 const_iterator operator ++( int ){ const_iterator it = *this ; _p++ ; return it; }
81 const_iterator &operator ++( void ){ _p++ ; return *this; }
82 const Pixel32 &operator * ( void ){ return *_p; }
83 const Pixel32 *operator -> ( void ){ return _p; }
84 protected:
85 friend Image32;
86 const Pixel32 *_p;
87 };
88
89 iterator begin( void ){ return iterator( _pixels ); }
90 iterator end( void ){ return iterator( _pixels+_width*_height ); }
91 const_iterator begin( void ) const { return const_iterator( _pixels ); }
93
95 Image32( void );
96
98 Image32( const Image32& img );
99
101 Image32( Image32&& img );
102
104 Image32& operator = ( const Image32& img );
105
107 Image32& operator = ( Image32&& img );
108
110 ~Image32( void );
111
113 void setSize( int width , int height );
114
116 int width( void ) const;
117
119 int height( void ) const;
120
123 Pixel32& operator() ( int x , int y );
124
127 const Pixel32& operator() ( int x , int y ) const;
128
130 void read( std::string fileName );
131
133 void write( std::string fileName ) const;
134
138 Image32 addRandomNoise( double noise ) const;
139
142 Image32 brighten( double brightness ) const;
143
145 Image32 luminance( void ) const;
146
149 Image32 contrast( double contrast ) const;
150
153 Image32 saturate( double saturation ) const;
154
158 Image32 quantize( int bits ) const;
159
163 Image32 randomDither( int bits ) const;
164
168 Image32 orderedDither2X2( int bits ) const;
169
173 Image32 floydSteinbergDither( int bits ) const;
174
176 Image32 blur3X3( void ) const;
177
179 Image32 edgeDetect3X3( void ) const;
180
184 Image32 scaleNearest( double scaleFactor ) const;
185
188 Image32 scaleBilinear( double scaleFactor ) const;
189
192 Image32 scaleGaussian( double scaleFactor ) const;
193
196 Image32 rotateNearest( double angle ) const;
197
200 Image32 rotateBilinear( double angle ) const;
201
204 Image32 rotateGaussian( double angle ) const;
205
208 void setAlpha( const Image32& matte );
209
212 Image32 composite( const Image32& overlay ) const;
213
216 Image32 crop( int x1 , int y1 , int x2 , int y2 ) const;
217
219 Image32 funFilter( void ) const;
220
224 static Image32 BeierNeelyMorph( const Image32& source , const Image32& destination , const OrientedLineSegmentPairs& olsp , double timeStep );
225
227 Image32 warp( const OrientedLineSegmentPairs& olsp ) const;
228
232 static Image32 CrossDissolve( const Image32& source , const Image32& destination , double blendWeight );
233
237
241
244 Pixel32 gaussianSample( Util::Point2D p , double variance , double radius ) const;
245 };
246}
247#endif // IMAGE_INCLUDED
248
Definition image.h:35
Image32 composite(const Image32 &overlay) const
Definition image.todo.cpp:174
Image32 & operator=(const Image32 &img)
Definition image.cpp:29
Image32 blur3X3(void) const
Definition image.todo.cpp:94
Image32 brighten(double brightness) const
Definition image.todo.cpp:22
Pixel32 * _pixels
Definition image.h:40
~Image32(void)
Definition image.cpp:52
const_iterator end(void) const
Definition image.h:92
Image32 scaleNearest(double scaleFactor) const
Definition image.todo.cpp:112
Image32 scaleGaussian(double scaleFactor) const
Definition image.todo.cpp:130
Image32 orderedDither2X2(int bits) const
Definition image.todo.cpp:76
Image32 randomDither(int bits) const
Definition image.todo.cpp:67
int height(void) const
Definition image.cpp:89
void _assertInBounds(int x, int y) const
Definition image.cpp:70
void setAlpha(const Image32 &matte)
Definition image.todo.cpp:166
Image32 rotateBilinear(double angle) const
Definition image.todo.cpp:148
Image32 warp(const OrientedLineSegmentPairs &olsp) const
Definition image.todo.cpp:192
int _height
Definition image.h:37
int _width
Definition image.h:37
Image32 contrast(double contrast) const
Definition image.todo.cpp:40
Image32 scaleBilinear(double scaleFactor) const
Definition image.todo.cpp:121
Pixel32 bilinearSample(Util::Point2D p) const
Definition image.todo.cpp:228
void read(std::string fileName)
Definition image.cpp:118
Image32 crop(int x1, int y1, int x2, int y2) const
Definition image.todo.cpp:210
Image32 funFilter(void) const
Definition image.todo.cpp:201
Image32 addRandomNoise(double noise) const
Definition image.todo.cpp:13
const_iterator begin(void) const
Definition image.h:91
Pixel32 & operator()(int x, int y)
Definition image.cpp:75
Image32 luminance(void) const
Definition image.todo.cpp:31
Image32 edgeDetect3X3(void) const
Definition image.todo.cpp:103
Image32 quantize(int bits) const
Definition image.todo.cpp:58
Pixel32 gaussianSample(Util::Point2D p, double variance, double radius) const
Definition image.todo.cpp:237
int width(void) const
Definition image.cpp:87
void setSize(int width, int height)
Definition image.cpp:54
Pixel32 nearestSample(Util::Point2D p) const
Definition image.todo.cpp:219
Image32 floydSteinbergDither(int bits) const
Definition image.todo.cpp:85
void write(std::string fileName) const
Definition image.cpp:126
Image32(void)
Definition image.cpp:21
iterator begin(void)
Definition image.h:89
Image32 rotateGaussian(double angle) const
Definition image.todo.cpp:157
Image32 rotateNearest(double angle) const
Definition image.todo.cpp:139
Image32 saturate(double saturation) const
Definition image.todo.cpp:49
static Image32 CrossDissolve(const Image32 &source, const Image32 &destination, double blendWeight)
Definition image.todo.cpp:183
iterator end(void)
Definition image.h:90
Definition lineSegments.h:63
Definition image.h:14
Pixel32(void)
Definition image.cpp:16
unsigned char r
Definition image.h:17
unsigned char a
Definition image.h:26
unsigned char b
Definition image.h:23
unsigned char g
Definition image.h:20
CmdLineParameterArray< string, 3 > BeierNeelyMorph("bnMorph")
Definition bmp.cpp:142
Point< 2 > Point2D
Definition geometry.h:523
Definition image.h:69
bool operator!=(const const_iterator &it) const
Definition image.h:79
const_iterator(void)
Definition image.h:76
bool operator==(const const_iterator &it) const
Definition image.h:78
Pixel32 value_type
Definition image.h:73
const Pixel32 * _p
Definition image.h:86
const_iterator & operator++(void)
Definition image.h:81
const Pixel32 & operator*(void)
Definition image.h:82
const Pixel32 * operator->(void)
Definition image.h:83
const Pixel32 * pointer
Definition image.h:72
std::forward_iterator_tag iterator_category
Definition image.h:70
const_iterator(const Pixel32 *p)
Definition image.h:77
std::ptrdiff_t difference_type
Definition image.h:74
const Pixel32 & reference
Definition image.h:71
friend Image32
Definition image.h:85
Definition image.h:48
friend Image32
Definition image.h:64
Pixel32 * operator->(void)
Definition image.h:62
bool operator!=(const iterator &it) const
Definition image.h:58
Pixel32 * _p
Definition image.h:65
Pixel32 & operator*(void)
Definition image.h:61
iterator(void)
Definition image.h:55
Pixel32 & reference
Definition image.h:50
iterator & operator++(void)
Definition image.h:60
Pixel32 * pointer
Definition image.h:51
iterator(Pixel32 *p)
Definition image.h:56
std::forward_iterator_tag iterator_category
Definition image.h:49
std::ptrdiff_t difference_type
Definition image.h:53
Pixel32 value_type
Definition image.h:52
bool operator==(const iterator &it) const
Definition image.h:57