KiCad PCB EDA Suite
CIMAGE Class Reference

CIMAGE manages a 8-bit channel image. More...

#include <cimage.h>

Public Member Functions

 CIMAGE (unsigned int aXsize, unsigned int aYsize)
 Constructor CIMAGE constructs a CIMAGE based on image size. More...
 
 CIMAGE (const CIMAGE &aSrcImage)
 CIMAGE constructs a CIMAGE based on an existent image. More...
 
 ~CIMAGE ()
 
void Setpixel (int aX, int aY, unsigned char aValue)
 Function Setpixel set a value in a pixel position, position is clamped in accord with the current clamp settings. More...
 
unsigned char Getpixel (int aX, int aY) const
 Function Getpixel get the pixel value from pixel position, position is clamped in accord with the current clamp settings. More...
 
void Hline (int aXStart, int aXEnd, int aY, unsigned char aValue)
 hline - Draws an horizontal line More...
 
void CircleFilled (int aCx, int aCy, int aRadius, unsigned char aValue)
 CircleFilled. More...
 
void CopyFull (const CIMAGE *aImgA, const CIMAGE *aImgB, IMAGE_OP aOperation)
 Function CopyFull perform a copy operation, based on operation type. More...
 
void Invert ()
 Function Invert invert the values of image this <- (255 - this) More...
 
void EfxFilter (CIMAGE *aInImg, IMAGE_FILTER aFilterType)
 Function EfxFilter apply a filter to the input image and stores it in the image class this <- FilterType(aInImg) More...
 
void SaveAsPNG (const wxString &aFileName) const
 Function SaveAsPNG save image buffer to a PNG file into the working folder. More...
 
void SetPixelsFromNormalizedFloat (const float *aNormalizedFloatArray)
 Function SetPixelsFromNormalizedFloat set the current channel from a float normalized (0.0 - 1.0) buffer this <- CLAMP(NormalizedFloat * 255) More...
 
unsigned char * GetBuffer () const
 Function GetBuffer get the image buffer pointer. More...
 
unsigned int GetWidth () const
 
unsigned int GetHeight () const
 

Private Member Functions

bool wrapCoords (int *aXo, int *aYo) const
 Function wrapCoords calculate the coordinates points in accord with the current clamping settings. More...
 
void plot8CircleLines (int aCx, int aCy, int aX, int aY, unsigned char aValue)
 

Private Attributes

unsigned char * m_pixels
 buffer to store the image 8bit-channel More...
 
unsigned int m_width
 width of the image More...
 
unsigned int m_height
 height of the image More...
 
unsigned int m_wxh
 width * height precalc value More...
 
IMAGE_WRAP m_wraping
 current wrapping type More...
 

Detailed Description

CIMAGE manages a 8-bit channel image.

Definition at line 89 of file cimage.h.

Constructor & Destructor Documentation

◆ CIMAGE() [1/2]

CIMAGE::CIMAGE ( unsigned int  aXsize,
unsigned int  aYsize 
)

Constructor CIMAGE constructs a CIMAGE based on image size.

Parameters
aXsizex size
aYsizey size

Definition at line 44 of file cimage.cpp.

45 {
46  m_wxh = aXsize * aYsize;
47  m_pixels = new unsigned char[m_wxh];
48  memset( m_pixels, 0, m_wxh );
49  m_width = aXsize;
50  m_height = aYsize;
52 }
unsigned int m_height
height of the image
Definition: cimage.h:227
IMAGE_WRAP m_wraping
current wrapping type
Definition: cimage.h:229
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_width
width of the image
Definition: cimage.h:226
unsigned int m_wxh
width * height precalc value
Definition: cimage.h:228
Coords are clamped to image size.

References CLAMP, m_height, m_pixels, m_width, m_wraping, and m_wxh.

◆ CIMAGE() [2/2]

CIMAGE::CIMAGE ( const CIMAGE aSrcImage)

CIMAGE constructs a CIMAGE based on an existent image.

It will copy the image to the new

Parameters
aSrcImage

Definition at line 55 of file cimage.cpp.

56 {
57  m_wxh = aSrcImage.GetWidth() * aSrcImage.GetHeight();
58  m_pixels = new unsigned char[m_wxh];
59  memcpy( m_pixels, aSrcImage.GetBuffer(), m_wxh );
60  m_width = aSrcImage.GetWidth();
61  m_height = aSrcImage.GetHeight();
63 }
unsigned int m_height
height of the image
Definition: cimage.h:227
unsigned int GetWidth() const
Definition: cimage.h:209
IMAGE_WRAP m_wraping
current wrapping type
Definition: cimage.h:229
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int GetHeight() const
Definition: cimage.h:210
unsigned int m_width
width of the image
Definition: cimage.h:226
unsigned int m_wxh
width * height precalc value
Definition: cimage.h:228
unsigned char * GetBuffer() const
Function GetBuffer get the image buffer pointer.
Definition: cimage.cpp:72
Coords are clamped to image size.

References CLAMP, GetBuffer(), GetHeight(), GetWidth(), m_height, m_pixels, m_width, m_wraping, and m_wxh.

◆ ~CIMAGE()

CIMAGE::~CIMAGE ( )

Definition at line 66 of file cimage.cpp.

67 {
68  delete[] m_pixels;
69 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225

References m_pixels.

Member Function Documentation

◆ CircleFilled()

void CIMAGE::CircleFilled ( int  aCx,
int  aCy,
int  aRadius,
unsigned char  aValue 
)

CircleFilled.

Parameters
aCx
aCy
aRadius
aValue

Definition at line 173 of file cimage.cpp.

174 {
175  int x = aRadius;
176  int y = 0;
177  int xChange = 1 - 2 * aRadius;
178  int yChange = 0;
179  int radiusError = 0;
180 
181  while( x >= y )
182  {
183  plot8CircleLines( aCx, aCy, x, y, aValue );
184  y++;
185  radiusError += yChange;
186  yChange += 2;
187 
188  if( (2 * radiusError + xChange) > 0 )
189  {
190  x--;
191  radiusError += xChange;
192  xChange += 2;
193  }
194  }
195 }
void plot8CircleLines(int aCx, int aCy, int aX, int aY, unsigned char aValue)
Definition: cimage.cpp:113

References plot8CircleLines().

Referenced by C3D_RENDER_OGL_LEGACY::initializeOpenGL().

◆ CopyFull()

void CIMAGE::CopyFull ( const CIMAGE aImgA,
const CIMAGE aImgB,
IMAGE_OP  aOperation 
)

Function CopyFull perform a copy operation, based on operation type.

The result destination is the self image class

Parameters
aImgAan image input
aImgBan image input
aOperationoperation to perform IMAGE_OP::RAW this <- aImgA IMAGE_OP::ADD this <- CLAMP(aImgA + aImgB) IMAGE_OP::SUB this <- CLAMP(aImgA - aImgB) IMAGE_OP::DIF this <- abs(aImgA - aImgB) IMAGE_OP::MUL this <- aImgA * aImgB IMAGE_OP::AND this <- aImgA & aImgB IMAGE_OP::OR this <- aImgA | aImgB IMAGE_OP::XOR this <- aImgA ^ aImgB IMAGE_OP::BLEND50 this <- (aImgA + aImgB) / 2 IMAGE_OP::MIN this <- (aImgA < aImgB)?aImgA:aImgB IMAGE_OP::MAX this <- (aImgA > aImgB)?aImgA:aImgB

Definition at line 205 of file cimage.cpp.

206 {
207  int aV, bV;
208 
209  if( aOperation == IMAGE_OP::RAW )
210  {
211  if( aImgA == NULL )
212  return;
213  }
214  else
215  {
216  if( (aImgA == NULL) || (aImgB == NULL) )
217  return;
218  }
219 
220  switch(aOperation)
221  {
222  case IMAGE_OP::RAW:
223  memcpy( m_pixels, aImgA->m_pixels, m_wxh );
224  break;
225 
226  case IMAGE_OP::ADD:
227  for( unsigned int it = 0;it < m_wxh; it++ )
228  {
229  aV = aImgA->m_pixels[it];
230  bV = aImgB->m_pixels[it];
231 
232  aV = (aV + bV);
233  aV = (aV > 255)?255:aV;
234 
235  m_pixels[it] = aV;
236  }
237  break;
238 
239  case IMAGE_OP::SUB:
240  for( unsigned int it = 0;it < m_wxh; it++ )
241  {
242  aV = aImgA->m_pixels[it];
243  bV = aImgB->m_pixels[it];
244 
245  aV = (aV - bV);
246  aV = (aV < 0)?0:aV;
247 
248  m_pixels[it] = aV;
249  }
250  break;
251 
252  case IMAGE_OP::DIF:
253  for( unsigned int it = 0;it < m_wxh; it++ )
254  {
255  aV = aImgA->m_pixels[it];
256  bV = aImgB->m_pixels[it];
257 
258  m_pixels[it] = abs( aV - bV );
259  }
260  break;
261 
262  case IMAGE_OP::MUL:
263  for( unsigned int it = 0;it < m_wxh; it++ )
264  {
265  aV = aImgA->m_pixels[it];
266  bV = aImgB->m_pixels[it];
267 
268  m_pixels[it] = (unsigned char)((((float)aV / 255.0f) * ((float)bV / 255.0f)) * 255);
269  }
270  break;
271 
272  case IMAGE_OP::AND:
273  for( unsigned int it = 0;it < m_wxh; it++ )
274  {
275  m_pixels[it] = aImgA->m_pixels[it] & aImgB->m_pixels[it];
276  }
277  break;
278 
279  case IMAGE_OP::OR:
280  for( unsigned int it = 0;it < m_wxh; it++ )
281  {
282  m_pixels[it] = aImgA->m_pixels[it] | aImgB->m_pixels[it];
283  }
284  break;
285 
286  case IMAGE_OP::XOR:
287  for( unsigned int it = 0;it < m_wxh; it++ )
288  {
289  m_pixels[it] = aImgA->m_pixels[it] ^ aImgB->m_pixels[it];
290  }
291  break;
292 
293  case IMAGE_OP::BLEND50:
294  for( unsigned int it = 0;it < m_wxh; it++ )
295  {
296  aV = aImgA->m_pixels[it];
297  bV = aImgB->m_pixels[it];
298 
299  m_pixels[it] = (aV + bV) / 2;
300  }
301  break;
302 
303  case IMAGE_OP::MIN:
304  for( unsigned int it = 0;it < m_wxh; it++ )
305  {
306  aV = aImgA->m_pixels[it];
307  bV = aImgB->m_pixels[it];
308 
309  m_pixels[it] = (aV < bV)?aV:bV;
310  }
311  break;
312 
313  case IMAGE_OP::MAX:
314  for( unsigned int it = 0;it < m_wxh; it++ )
315  {
316  aV = aImgA->m_pixels[it];
317  bV = aImgB->m_pixels[it];
318 
319  m_pixels[it] = (aV > bV)?aV:bV;
320  }
321  break;
322 
323  default:
324  break;
325  }
326 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
#define NULL
unsigned int m_wxh
width * height precalc value
Definition: cimage.h:228

References ADD, AND, BLEND50, DIF, m_pixels, m_wxh, MAX, MIN, MUL, NULL, OR, RAW, SUB, and XOR.

◆ EfxFilter()

void CIMAGE::EfxFilter ( CIMAGE aInImg,
IMAGE_FILTER  aFilterType 
)

Function EfxFilter apply a filter to the input image and stores it in the image class this <- FilterType(aInImg)

Parameters
aInImginput image
aFilterTypefilter type to apply

Definition at line 472 of file cimage.cpp.

473 {
474  S_FILTER filter = FILTERS[static_cast<int>( aFilterType )];
475 
476  aInImg->m_wraping = IMAGE_WRAP::CLAMP;
478 
479  std::atomic<size_t> nextRow( 0 );
480  std::atomic<size_t> threadsFinished( 0 );
481 
482  size_t parallelThreadCount = std::max<size_t>( std::thread::hardware_concurrency(), 2 );
483 
484  for( size_t ii = 0; ii < parallelThreadCount; ++ii )
485  {
486  std::thread t = std::thread( [&]()
487  {
488  for( size_t iy = nextRow.fetch_add( 1 );
489  iy < m_height;
490  iy = nextRow.fetch_add( 1 ) )
491  {
492  for( size_t ix = 0; ix < m_width; ix++ )
493  {
494  int v = 0;
495 
496  for( size_t sy = 0; sy < 5; sy++ )
497  {
498  for( size_t sx = 0; sx < 5; sx++ )
499  {
500  int factor = filter.kernel[sx][sy];
501  unsigned char pixelv = aInImg->Getpixel( ix + sx - 2,
502  iy + sy - 2 );
503 
504  v += pixelv * factor;
505  }
506  }
507 
508  v /= filter.div;
509  v += filter.offset;
510  CLAMP(v, 0, 255);
511  //TODO: This needs to write to a separate buffer
512  m_pixels[ix + iy * m_width] = v;
513  }
514  }
515 
516  threadsFinished++;
517  } );
518 
519  t.detach();
520  }
521 
522  while( threadsFinished < parallelThreadCount )
523  std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
524 }
unsigned int m_height
height of the image
Definition: cimage.h:227
IMAGE_WRAP m_wraping
current wrapping type
Definition: cimage.h:229
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned char offset
Definition: cimage.h:81
unsigned int m_width
width of the image
Definition: cimage.h:226
unsigned char Getpixel(int aX, int aY) const
Function Getpixel get the pixel value from pixel position, position is clamped in accord with the cur...
Definition: cimage.cpp:129
signed char kernel[5][5]
Definition: cimage.h:79
unsigned int div
Definition: cimage.h:80
5x5 Filter struct parameters
Definition: cimage.h:78
static const S_FILTER FILTERS[]
Definition: cimage.cpp:332
Coords are clamped to image size.

References CLAMP, S_FILTER::div, FILTERS, Getpixel(), S_FILTER::kernel, m_height, m_pixels, m_width, m_wraping, and S_FILTER::offset.

Referenced by C3D_RENDER_OGL_LEGACY::initializeOpenGL().

◆ GetBuffer()

unsigned char * CIMAGE::GetBuffer ( ) const

Function GetBuffer get the image buffer pointer.

Returns
unsigned char * - the pointer of the buffer 8bit channel

Definition at line 72 of file cimage.cpp.

73 {
74  return m_pixels;
75 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225

References m_pixels.

Referenced by CIMAGE(), and OGL_LoadTexture().

◆ GetHeight()

unsigned int CIMAGE::GetHeight ( ) const
inline

Definition at line 210 of file cimage.h.

210 { return m_height; }
unsigned int m_height
height of the image
Definition: cimage.h:227

References m_height.

Referenced by CIMAGE(), and OGL_LoadTexture().

◆ Getpixel()

unsigned char CIMAGE::Getpixel ( int  aX,
int  aY 
) const

Function Getpixel get the pixel value from pixel position, position is clamped in accord with the current clamp settings.

Parameters
aXx position
aYy position
Returns
unsigned char - pixel value

Definition at line 129 of file cimage.cpp.

130 {
131  if( wrapCoords( &aX, &aY ) )
132  return m_pixels[aX + aY * m_width];
133  else
134  return 0;
135 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_width
width of the image
Definition: cimage.h:226
bool wrapCoords(int *aXo, int *aYo) const
Function wrapCoords calculate the coordinates points in accord with the current clamping settings.
Definition: cimage.cpp:78

References m_pixels, m_width, and wrapCoords().

Referenced by EfxFilter().

◆ GetWidth()

unsigned int CIMAGE::GetWidth ( ) const
inline

Definition at line 209 of file cimage.h.

209 { return m_width; }
unsigned int m_width
width of the image
Definition: cimage.h:226

References m_width.

Referenced by CIMAGE(), and OGL_LoadTexture().

◆ Hline()

void CIMAGE::Hline ( int  aXStart,
int  aXEnd,
int  aY,
unsigned char  aValue 
)

hline - Draws an horizontal line

Parameters
aXStart- x start position
aXEnd- x end position
aY- y positoin
aValue- value to add

Definition at line 138 of file cimage.cpp.

139 {
140  if( ( aY < 0 ) ||
141  ( aY >= (int)m_height ) ||
142  ( ( aXStart < 0 ) && ( aXEnd < 0) ) ||
143  ( ( aXStart >= (int)m_width ) && ( aXEnd >= (int)m_width) ) )
144  return;
145 
146  if( aXStart > aXEnd )
147  {
148  int swap = aXStart;
149 
150  aXStart = aXEnd;
151  aXEnd = swap;
152  }
153 
154  // Clamp line
155  if( aXStart < 0 )
156  aXStart = 0;
157 
158  if( aXEnd >= (int)m_width )
159  aXEnd = m_width - 1;
160 
161  unsigned char* pixelPtr = &m_pixels[aXStart + aY * m_width];
162  unsigned char* pixelPtrEnd = pixelPtr + (unsigned int)((aXEnd - aXStart) + 1);
163 
164  while( pixelPtr < pixelPtrEnd )
165  {
166  *pixelPtr = aValue;
167  pixelPtr++;
168  }
169 }
unsigned int m_height
height of the image
Definition: cimage.h:227
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_width
width of the image
Definition: cimage.h:226

References m_height, m_pixels, and m_width.

Referenced by plot8CircleLines().

◆ Invert()

void CIMAGE::Invert ( )

Function Invert invert the values of image this <- (255 - this)

Definition at line 198 of file cimage.cpp.

199 {
200  for( unsigned int it = 0; it < m_wxh; it++ )
201  m_pixels[it] = 255 - m_pixels[it];
202 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_wxh
width * height precalc value
Definition: cimage.h:228

References m_pixels, and m_wxh.

◆ plot8CircleLines()

void CIMAGE::plot8CircleLines ( int  aCx,
int  aCy,
int  aX,
int  aY,
unsigned char  aValue 
)
private

Definition at line 113 of file cimage.cpp.

114 {
115  Hline( aCx - aX, aCx + aX, aCy + aY, aValue );
116  Hline( aCx - aX, aCx + aX, aCy - aY, aValue );
117  Hline( aCx - aY, aCx + aY, aCy + aX, aValue );
118  Hline( aCx - aY, aCx + aY, aCy - aX, aValue );
119 }
void Hline(int aXStart, int aXEnd, int aY, unsigned char aValue)
hline - Draws an horizontal line
Definition: cimage.cpp:138

References Hline().

Referenced by CircleFilled().

◆ SaveAsPNG()

void CIMAGE::SaveAsPNG ( const wxString &  aFileName) const

Function SaveAsPNG save image buffer to a PNG file into the working folder.

each of RGB channel will have the 8bit-channel from the image.

Parameters
aFileNamefime name (without extension)

Definition at line 539 of file cimage.cpp.

540 {
541  DBG_SaveBuffer( aFileName, m_pixels, m_width, m_height );
542 }
unsigned int m_height
height of the image
Definition: cimage.h:227
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
void DBG_SaveBuffer(const wxString &aFileName, const unsigned char *aInBuffer, unsigned int aXSize, unsigned int aYSize)
unsigned int m_width
width of the image
Definition: cimage.h:226

References DBG_SaveBuffer(), m_height, m_pixels, and m_width.

◆ Setpixel()

void CIMAGE::Setpixel ( int  aX,
int  aY,
unsigned char  aValue 
)

Function Setpixel set a value in a pixel position, position is clamped in accord with the current clamp settings.

Parameters
aXx position
aYy position
aValuevalue to set the pixel

Definition at line 122 of file cimage.cpp.

123 {
124  if( wrapCoords( &aX, &aY ) )
125  m_pixels[aX + aY * m_width] = aValue;
126 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_width
width of the image
Definition: cimage.h:226
bool wrapCoords(int *aXo, int *aYo) const
Function wrapCoords calculate the coordinates points in accord with the current clamping settings.
Definition: cimage.cpp:78

References m_pixels, m_width, and wrapCoords().

◆ SetPixelsFromNormalizedFloat()

void CIMAGE::SetPixelsFromNormalizedFloat ( const float *  aNormalizedFloatArray)

Function SetPixelsFromNormalizedFloat set the current channel from a float normalized (0.0 - 1.0) buffer this <- CLAMP(NormalizedFloat * 255)

Parameters
aNormalizedFloatArraya float array with the same size of the image

Definition at line 527 of file cimage.cpp.

528 {
529  for( unsigned int i = 0; i < m_wxh; i++ )
530  {
531  int v = aNormalizedFloatArray[i] * 255;
532 
533  CLAMP( v, 0, 255 );
534  m_pixels[i] = v;
535  }
536 }
unsigned char * m_pixels
buffer to store the image 8bit-channel
Definition: cimage.h:225
unsigned int m_wxh
width * height precalc value
Definition: cimage.h:228
Coords are clamped to image size.

References CLAMP, m_pixels, and m_wxh.

◆ wrapCoords()

bool CIMAGE::wrapCoords ( int *  aXo,
int *  aYo 
) const
private

Function wrapCoords calculate the coordinates points in accord with the current clamping settings.

Parameters
aXoX coordinate to be converted (output)
aXoY coordinate to be converted (output)
Returns
bool - true if the coordinates are inside the image, false otherwise

Definition at line 78 of file cimage.cpp.

79 {
80  int x = *aXo;
81  int y = *aYo;
82 
83  switch(m_wraping)
84  {
85  case IMAGE_WRAP::CLAMP:
86  x = (x < 0 )?0:x;
87  x = (x >= (int)(m_width - 1))?(m_width - 1):x;
88  y = (y < 0)?0:y;
89  y = (y >= (int)(m_height - 1))?(m_height - 1):y;
90  break;
91 
92  case IMAGE_WRAP::WRAP:
93  x = (x < 0)?((m_width - 1)+x):x;
94  x = (x >= (int)(m_width - 1))?(x - m_width):x;
95  y = (y < 0)?((m_height - 1)+y):y;
96  y = (y >= (int)(m_height - 1))?(y - m_height):y;
97  break;
98 
99  default:
100  break;
101  }
102 
103  if( (x < 0) || (x >= (int)m_width) ||
104  (y < 0) || (y >= (int)m_height) )
105  return false;
106 
107  *aXo = x;
108  *aYo = y;
109 
110  return true;
111 }
unsigned int m_height
height of the image
Definition: cimage.h:227
Coords are wrapped arround.
IMAGE_WRAP m_wraping
current wrapping type
Definition: cimage.h:229
unsigned int m_width
width of the image
Definition: cimage.h:226
Coords are clamped to image size.

References CLAMP, m_height, m_width, m_wraping, and WRAP.

Referenced by Getpixel(), and Setpixel().

Member Data Documentation

◆ m_height

unsigned int CIMAGE::m_height
private

height of the image

Definition at line 227 of file cimage.h.

Referenced by CIMAGE(), EfxFilter(), GetHeight(), Hline(), SaveAsPNG(), and wrapCoords().

◆ m_pixels

unsigned char* CIMAGE::m_pixels
private

buffer to store the image 8bit-channel

Definition at line 225 of file cimage.h.

Referenced by CIMAGE(), CopyFull(), EfxFilter(), GetBuffer(), Getpixel(), Hline(), Invert(), SaveAsPNG(), Setpixel(), SetPixelsFromNormalizedFloat(), and ~CIMAGE().

◆ m_width

unsigned int CIMAGE::m_width
private

width of the image

Definition at line 226 of file cimage.h.

Referenced by CIMAGE(), EfxFilter(), Getpixel(), GetWidth(), Hline(), SaveAsPNG(), Setpixel(), and wrapCoords().

◆ m_wraping

IMAGE_WRAP CIMAGE::m_wraping
private

current wrapping type

Definition at line 229 of file cimage.h.

Referenced by CIMAGE(), EfxFilter(), and wrapCoords().

◆ m_wxh

unsigned int CIMAGE::m_wxh
private

width * height precalc value

Definition at line 228 of file cimage.h.

Referenced by CIMAGE(), CopyFull(), Invert(), and SetPixelsFromNormalizedFloat().


The documentation for this class was generated from the following files: