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(NULL) {}
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
70 {
71 using iterator_category = std::forward_iterator_tag;
72 using reference = const Pixel32 &;
73 using pointer = const Pixel32 *;
75 using difference_type = std::ptrdiff_t;
76
77 const_iterator( void ) : _p(nullptr) {}
78 const_iterator( const Pixel32 *p ) : _p(p) {}
79 bool operator == ( const const_iterator &it ) const { return _p==it._p; }
80 bool operator != ( const const_iterator &it ) const { return _p!=it._p; }
81 const_iterator operator ++( int ){ const_iterator it = *this ; _p++ ; return it; }
82 const_iterator &operator ++( void ){ _p++ ; return *this; }
83 const Pixel32 &operator * ( void ){ return *_p; }
84 const Pixel32 *operator -> ( void ){ return _p; }
85 protected:
86 friend Image32;
87 const Pixel32 *_p;
88 };
89
90 iterator begin( void ){ return iterator( _pixels ); }
91 iterator end( void ){ return iterator( _pixels+_width*_height ); }
92 const_iterator begin( void ) const { return const_iterator( _pixels ); }
94
96 Image32( void );
97
99 Image32( const Image32& img );
100
102 Image32( Image32&& img );
103
105 Image32& operator = ( const Image32& img );
106
108 Image32& operator = ( Image32&& img );
109
111 ~Image32( void );
112
114 void setSize( int width , int height );
115
117 int width( void ) const;
118
120 int height( void ) const;
121
124 Pixel32& operator() ( int x , int y );
125
128 const Pixel32& operator() ( int x , int y ) const;
129
131 void read( std::string fileName );
132
134 void write( std::string fileName ) const;
135
139 Image32 addRandomNoise( double noise ) const;
140
143 Image32 brighten( double brightness ) const;
144
146 Image32 luminance( void ) const;
147
150 Image32 contrast( double contrast ) const;
151
154 Image32 saturate( double saturation ) const;
155
159 Image32 quantize( int bits ) const;
160
164 Image32 randomDither( int bits ) const;
165
169 Image32 orderedDither2X2( int bits ) const;
170
174 Image32 floydSteinbergDither( int bits ) const;
175
177 Image32 blur3X3( void ) const;
178
180 Image32 edgeDetect3X3( void ) const;
181
185 Image32 scaleNearest( double scaleFactor ) const;
186
189 Image32 scaleBilinear( double scaleFactor ) const;
190
193 Image32 scaleGaussian( double scaleFactor ) const;
194
197 Image32 rotateNearest( double angle ) const;
198
201 Image32 rotateBilinear( double angle ) const;
202
205 Image32 rotateGaussian( double angle ) const;
206
209 void setAlpha( const Image32& matte );
210
213 Image32 composite( const Image32& overlay ) const;
214
217 Image32 crop( int x1 , int y1 , int x2 , int y2 ) const;
218
220 Image32 funFilter( void ) const;
221
225 static Image32 BeierNeelyMorph( const Image32& source , const Image32& destination , const OrientedLineSegmentPairs& olsp , double timeStep );
226
228 Image32 warp( const OrientedLineSegmentPairs& olsp ) const;
229
233 static Image32 CrossDissolve( const Image32& source , const Image32& destination , double blendWeight );
234
237
240
243 Pixel32 gaussianSample( Util::Point2D p , double variance , double radius ) const;
244 };
245}
246#endif // IMAGE_INCLUDED
247
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:93
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:92
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:90
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:91
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
Definition geometry.h:52
CmdLineParameterArray< string, 3 > BeierNeelyMorph("bnMorph")
Definition bmp.cpp:142
Definition image.h:70
bool operator!=(const const_iterator &it) const
Definition image.h:80
const_iterator(void)
Definition image.h:77
bool operator==(const const_iterator &it) const
Definition image.h:79
const Pixel32 * _p
Definition image.h:87
const_iterator & operator++(void)
Definition image.h:82
const Pixel32 & operator*(void)
Definition image.h:83
const Pixel32 * operator->(void)
Definition image.h:84
std::forward_iterator_tag iterator_category
Definition image.h:71
const_iterator(const Pixel32 *p)
Definition image.h:78
std::ptrdiff_t difference_type
Definition image.h:75
friend Image32
Definition image.h:86
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
iterator & operator++(void)
Definition image.h:60
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
bool operator==(const iterator &it) const
Definition image.h:57