mudbox::ImageAccessorBase< ChannelType, nch > Class Template Reference

#include <image.h>

Inheritance diagram for mudbox::ImageAccessorBase< ChannelType, nch >:

Inheritance graph
[legend]
List of all members.

Detailed Description

template<class ChannelType, cu_int nch>
class mudbox::ImageAccessorBase< ChannelType, nch >

The ImageAccessorBase class gives you very fast access to pixels when the data type and channel count of an image are known at compile time (and this is very often the case.).

Public Member Functions

  ImageAccessorBase (Image *parent)
u_int  Width () const
u_int  Height () const
u_int  ChannelCount () const
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
  Set value for a specified texel.
float  ValueAt (u_int X, u_int Y, u_int Ch) const
  Get the value at a given coordinate.
void  SetColorAt (u_int X, u_int Y, const Color &cColor)
  Set value for a specified texel.
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void *  AddrAt (u_int X, u_int Y, u_int Ch)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
void  SetColorAt (u_int X, u_int Y, const Color &c)
template<>
void  SetColorAt (u_int X, u_int Y, const Color &c)
template<>
void  SetColorAt (u_int X, u_int Y, const Color &c)
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
float  ValueAt (u_int X, u_int Y, u_int Ch) const
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetValueAt (u_int X, u_int Y, u_int Ch, float fVal)
template<>
void  SetColorAt (u_int X, u_int Y, const Color &c)
template<>
void  SetColorAt (u_int X, u_int Y, const Color &c)

Constructor & Destructor Documentation

template<class ChannelType, cu_int nch>
mudbox::ImageAccessorBase< ChannelType, nch >::ImageAccessorBase Image parent  )  [inline]
 
02165     {
02166         m_Stride = parent->Width();
02167         m_Height = parent->Height();
02168         m_chans  = parent->ChannelCount();
02169         m_Image  = parent;
02170         m_pData  = (ChannelType *)parent->Data();
02171     }

Member Function Documentation

template<class ChannelType, cu_int nch>
u_int mudbox::ImageAccessorBase< ChannelType, nch >::Width  )  const [inline]
 
02173 { return m_Stride; }
template<class ChannelType, cu_int nch>
u_int mudbox::ImageAccessorBase< ChannelType, nch >::Height  )  const [inline]
 
02174 { return m_Height; }
template<class ChannelType, cu_int nch>
u_int mudbox::ImageAccessorBase< ChannelType, nch >::ChannelCount  )  const [inline]
 
02175 { return m_chans;  }
template<class ChannelType, cu_int nch>
void mudbox::ImageAccessorBase< ChannelType, nch >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 

Set value for a specified texel.

For integer maps 1 should be mapped for the maximum value (255 for 8 bit images and 65535 for 16 bit images)

template<class ChannelType, cu_int nch>
float mudbox::ImageAccessorBase< ChannelType, nch >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 

Get the value at a given coordinate.

template<class ChannelType, cu_int nch>
void mudbox::ImageAccessorBase< ChannelType, nch >::SetColorAt u_int  X,
u_int  Y,
const Color cColor
[inline]
 

Set value for a specified texel.

For integer maps 1 should be mapped for the maximum value (255 for 8 bit images and 65535 for 16 bit images)

template<class ChannelType, cu_int nch>
void* mudbox::ImageAccessorBase< ChannelType, nch >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
template<>
void * mudbox::ImageAccessorBase< u_char, 1 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02209 { return (void *)&m_pData[Ch + ((X + m_Stride * Y)    )]; }
template<>
void * mudbox::ImageAccessorBase< u_char, 2 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02212 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 2)]; }
template<>
void * mudbox::ImageAccessorBase< u_char, 3 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02215 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 3)]; }
template<>
void * mudbox::ImageAccessorBase< u_char, 4 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02218 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 4)]; }
template<>
void * mudbox::ImageAccessorBase< u_short, 1 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02222 { return (void *)&m_pData[Ch + ((X + m_Stride * Y)    )]; }
template<>
void * mudbox::ImageAccessorBase< u_short, 2 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02225 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 2)]; }
template<>
void * mudbox::ImageAccessorBase< u_short, 3 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02228 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 3)]; }
template<>
void * mudbox::ImageAccessorBase< u_short, 4 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02231 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 4)]; }
template<>
void * mudbox::ImageAccessorBase< float, 1 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02236 { return (void *)&m_pData[Ch + ((X + m_Stride * Y)    )]; }
template<>
void * mudbox::ImageAccessorBase< float, 2 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02239 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 2)]; }
template<>
void * mudbox::ImageAccessorBase< float, 3 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02242 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 3)]; }
template<>
void * mudbox::ImageAccessorBase< float, 4 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02245 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 4)]; }
template<>
void * mudbox::ImageAccessorBase< half_, 1 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02249 { return (void *)&m_pData[Ch + ((X + m_Stride * Y)    )]; }
template<>
void * mudbox::ImageAccessorBase< half_, 2 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02252 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 2)]; }
template<>
void * mudbox::ImageAccessorBase< half_, 3 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02255 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 3)]; }
template<>
void * mudbox::ImageAccessorBase< half_, 4 >::AddrAt u_int  X,
u_int  Y,
u_int  Ch
[inline]
 
02258 { return (void *)&m_pData[Ch + ((X + m_Stride * Y) * 4)]; }
template<>
void mudbox::ImageAccessorBase< u_char, 1 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02263 { m_pData[Ch + ((X + m_Stride * Y)    )] = (u_char)(255.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_char, 2 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02266 { m_pData[Ch + ((X + m_Stride * Y) * 2)] = (u_char)(255.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_char, 3 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02269 { m_pData[Ch + ((X + m_Stride * Y) * 3)] = (u_char)(255.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_char, 4 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02272 { m_pData[Ch + ((X + m_Stride * Y) * 4)] = (u_char)(255.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_short, 1 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02276 { m_pData[Ch + ((X + m_Stride * Y)    )] = (u_short)(65535.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_short, 2 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02279 { m_pData[Ch + ((X + m_Stride * Y) * 2)] = (u_short)(65535.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_short, 3 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02282 { m_pData[Ch + ((X + m_Stride * Y) * 3)] = (u_short)(65535.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_short, 4 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02285 { m_pData[Ch + ((X + m_Stride * Y) * 4)] = (u_short)(65535.0f * fVal); }
template<>
void mudbox::ImageAccessorBase< u_int, 1 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02290 { m_pData[Ch + ((X + m_Stride * Y)    )] = (u_int)(0xffffffff * fVal); }
template<>
void mudbox::ImageAccessorBase< u_int, 2 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02293 { m_pData[Ch + ((X + m_Stride * Y) * 2)] = (u_int)(0xffffffff * fVal); }
template<>
void mudbox::ImageAccessorBase< u_int, 3 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02296 { m_pData[Ch + ((X + m_Stride * Y) * 3)] = (u_int)(0xffffffff * fVal); }
template<>
void mudbox::ImageAccessorBase< u_int, 4 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02299 { m_pData[Ch + ((X + m_Stride * Y) * 4)] = (u_int)(0xffffffff * fVal); }
template<>
void mudbox::ImageAccessorBase< float, 1 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02303 { m_pData[Ch + ((X + m_Stride * Y)    )] = fVal; }
template<>
void mudbox::ImageAccessorBase< float, 2 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02306 { m_pData[Ch + ((X + m_Stride * Y) * 2)] = fVal; }
template<>
void mudbox::ImageAccessorBase< float, 3 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02309 { m_pData[Ch + ((X + m_Stride * Y) * 3)] = fVal; }
template<>
void mudbox::ImageAccessorBase< float, 4 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02312 { m_pData[Ch + ((X + m_Stride * Y) * 4)] = fVal; }
template<>
float mudbox::ImageAccessorBase< u_char, 1 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02316 { return m_pData[Ch + ((X + m_Stride * Y)    )] * (1.0f/255.0f); }
template<>
float mudbox::ImageAccessorBase< u_char, 2 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02319 { return m_pData[Ch + ((X + m_Stride * Y) * 2)] * (1.0f/255.0f); }
template<>
float mudbox::ImageAccessorBase< u_char, 3 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02322 { return m_pData[Ch + ((X + m_Stride * Y) * 3)] * (1.0f/255.0f); }
template<>
float mudbox::ImageAccessorBase< u_char, 4 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02325 { return m_pData[Ch + ((X + m_Stride * Y) * 4)] * (1.0f/255.0f); }
template<>
float mudbox::ImageAccessorBase< u_short, 1 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02329 { return m_pData[Ch + ((X + m_Stride * Y)    )] * (1.0f/65535.0f); }
template<>
float mudbox::ImageAccessorBase< u_short, 2 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02332 { return m_pData[Ch + ((X + m_Stride * Y) * 2)] * (1.0f/65535.0f); }
template<>
float mudbox::ImageAccessorBase< u_short, 3 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02335 { return m_pData[Ch + ((X + m_Stride * Y) * 3)] * (1.0f/65535.0f); }
template<>
float mudbox::ImageAccessorBase< u_short, 4 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02338 { return m_pData[Ch + ((X + m_Stride * Y) * 4)] * (1.0f/65535.0f); }
template<>
float mudbox::ImageAccessorBase< u_int, 1 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02342 { return m_pData[Ch + ((X + m_Stride * Y)    )] * (1.0f/float(0xffffffff)); }
template<>
float mudbox::ImageAccessorBase< u_int, 2 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02345 { return m_pData[Ch + ((X + m_Stride * Y) * 2)] * (1.0f/float(0xffffffff)); }
template<>
float mudbox::ImageAccessorBase< u_int, 3 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02348 { return m_pData[Ch + ((X + m_Stride * Y) * 3)] * (1.0f/float(0xffffffff)); }
template<>
float mudbox::ImageAccessorBase< u_int, 4 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02351 { return m_pData[Ch + ((X + m_Stride * Y) * 4)] * (1.0f/float(0xffffffff)); }
template<>
float mudbox::ImageAccessorBase< float, 1 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02355 { return m_pData[Ch + ((X + m_Stride * Y)    )]; }
template<>
float mudbox::ImageAccessorBase< float, 2 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02358 { return m_pData[Ch + ((X + m_Stride * Y) * 2)]; }
template<>
float mudbox::ImageAccessorBase< float, 3 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02361 { return m_pData[Ch + ((X + m_Stride * Y) * 3)]; }
template<>
float mudbox::ImageAccessorBase< float, 4 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02364 { return m_pData[Ch + ((X + m_Stride * Y) * 4)]; }
template<>
void mudbox::ImageAccessorBase< float, 4 >::SetColorAt u_int  X,
u_int  Y,
const Color c
[inline]
 
02369 {
02370     SetValueAt(X, Y, 0, c.r);
02371     SetValueAt(X, Y, 1, c.g);
02372     SetValueAt(X, Y, 2, c.b);
02373     SetValueAt(X, Y, 3, c.a);
02374 };
template<>
void mudbox::ImageAccessorBase< float, 3 >::SetColorAt u_int  X,
u_int  Y,
const Color c
[inline]
 
02379 {
02380     SetValueAt(X, Y, 0, c.r);
02381     SetValueAt(X, Y, 1, c.g);
02382     SetValueAt(X, Y, 2, c.b);
02383 };
template<>
void mudbox::ImageAccessorBase< u_char, 4 >::SetColorAt u_int  X,
u_int  Y,
const Color c
[inline]
 
02388 {
02389     SetValueAt(X, Y, 0, c.r);
02390     SetValueAt(X, Y, 1, c.g);
02391     SetValueAt(X, Y, 2, c.b);
02392     SetValueAt(X, Y, 3, c.a);
02393 };
template<>
float mudbox::ImageAccessorBase< half_, 3 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02440 { return float(m_pData[Ch + ((X + m_Stride * Y) * 3)]); }
template<>
float mudbox::ImageAccessorBase< half_, 4 >::ValueAt u_int  X,
u_int  Y,
u_int  Ch
const [inline]
 
02445 { return float(m_pData[Ch + ((X + m_Stride * Y) * 4)]); }
template<>
void mudbox::ImageAccessorBase< half_, 3 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02450 { m_pData[Ch + ((X + m_Stride * Y) * 3)] = fVal; }
template<>
void mudbox::ImageAccessorBase< half_, 4 >::SetValueAt u_int  X,
u_int  Y,
u_int  Ch,
float  fVal
[inline]
 
02455 { m_pData[Ch + ((X + m_Stride * Y) * 4)] = fVal; }
template<>
void mudbox::ImageAccessorBase< half_, 4 >::SetColorAt u_int  X,
u_int  Y,
const Color c
[inline]
 
02461 {
02462     SetValueAt(X, Y, 0, c.r);
02463     SetValueAt(X, Y, 1, c.g);
02464     SetValueAt(X, Y, 2, c.b);
02465     SetValueAt(X, Y, 3, c.a);
02466 };
template<>
void mudbox::ImageAccessorBase< half_, 3 >::SetColorAt u_int  X,
u_int  Y,
const Color c
[inline]
 
02471 {
02472     SetValueAt(X, Y, 0, c.r);
02473     SetValueAt(X, Y, 1, c.g);
02474     SetValueAt(X, Y, 2, c.b);
02475 };