App
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
app::TPixel< TPIXEL, TCHANNEL > Class Template Reference

#include <TPixel.hpp>

Public Member Functions

 TPixel ()
 defaultní konstruktor, nastaví hodnotu na 0.
 
 TPixel (TPIXEL val)
 Konstruktor, který nastaví požadovanou hodnotu pixelu.
 
 TPixel (TCHANNEL ch0, TCHANNEL ch1, TCHANNEL ch2, TCHANNEL ch3)
 Nastaví požadovanou hodnotu pixelu dle zadaných kanálů.
 
 ~TPixel ()
 Výchozí destruktor.
 
TCHANNEL getChannel (unsigned index)
 Vrátí hodnotu kanálu s daným indexem.
 
void setChannel (unsigned index, TCHANNEL newVal)
 Nastaví hodnotu kanálu s daným indexem.
 
void setChannels (TCHANNEL ch0, TCHANNEL ch1, TCHANNEL ch2, TCHANNEL ch3)
 Nastaví hodnotu dle zadaných hodnot kanálů
 
void getNormalized (double &ch0, double &ch1, double &ch2, double &ch3)
 Extrahuje z pixelu normalizované hodnoty kanálů
 
void setNormalized (const double &ch0, const double &ch1, const double &ch2, const double &ch3)
 Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů.
 
void RGB_HSV ()
 Převede pixel z RGB do HSV.
 
void HSV_RGB ()
 Provede převod z HSV do RGB.
 
void RGB_HLS ()
 Převede pixel z RGB do HLS.
 
void HLS_RGB ()
 Provede převod z HLS do RGB.
 

Static Public Member Functions

static void getNormalized (double &ch0, double &ch1, double &ch2, double &ch3, TPIXEL const *src)
 Extrahuje z pixelu normalizované hodnoty kanálů
 
static void setNormalized (TPIXEL *dst, const double &ch0, const double &ch1, const double &ch2, const double &ch3)
 Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů.
 
static void RGB_HSV_normalized (double &r, double &g, double &b, double &h, double &s, double &v)
 Provede převod z RGB do HSV.
 
static void HSV_RGB_normalized (double &h, double &s, double &v, double &r, double &g, double &b)
 Provede převod z HSV do RGB.
 
static void RGB_HLS_normalized (double &r, double &g, double &b, double &h, double &l, double &s)
 Provede převod z RGB do HLS.
 
static void HLS_RGB_normalized (double &h, double &l, double &s, double &r, double &g, double &b)
 

Public Attributes

TPIXEL value
 Hodnota pixelu.
 

Static Public Attributes

static const TCHANNEL maxChannel = ~0
 Maximální přípustná hodnota kanálu, uvažuje se bezznaménkový celočíselný typ, tedy ~0.
 

Detailed Description

template<typename TPIXEL, typename TCHANNEL>
class app::TPixel< TPIXEL, TCHANNEL >

Třída nahrazuje ARGB_Pixel, potenciálně velmi nebezpečná, protože nekontroluje meze a implicitně předpokládá 4kanálový pixel s tím, že alpha je uložena v posledním kanále.

Implementuje převodové vztahy mezi jednotlivými barevnými prostory.

Template Parameters
TPIXEL- celočíselný typ reprezentující celý pixel - přípustné je zatím pouze px_4x8bit
TCHANNEL- celočíselný typ reprezentující jeden kanál - přípustné je zatím pouze px_1x8bit

Definition at line 29 of file TPixel.hpp.

Constructor & Destructor Documentation

template<typename TPIXEL, typename TCHANNEL>
app::TPixel< TPIXEL, TCHANNEL >::TPixel ( )
inline

defaultní konstruktor, nastaví hodnotu na 0.

Definition at line 37 of file TPixel.hpp.

{ value = 0; }
template<typename TPIXEL, typename TCHANNEL>
app::TPixel< TPIXEL, TCHANNEL >::TPixel ( TPIXEL  val)
inline

Konstruktor, který nastaví požadovanou hodnotu pixelu.

Nastaví požadovanou hodnotu pixelu.

Parameters
valPožadovaná hodnota pixelu.

Definition at line 44 of file TPixel.hpp.

{ value = val; }
template<typename TPIXEL, typename TCHANNEL>
app::TPixel< TPIXEL, TCHANNEL >::TPixel ( TCHANNEL  ch0,
TCHANNEL  ch1,
TCHANNEL  ch2,
TCHANNEL  ch3 
)
inline

Nastaví požadovanou hodnotu pixelu dle zadaných kanálů.

Nastaví požadovanou hodnotu pixelu dle zadaných kanálů.

Parameters
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.

Definition at line 54 of file TPixel.hpp.

{ setChannels(ch0, ch1, ch2, ch3); }
template<typename TPIXEL, typename TCHANNEL>
app::TPixel< TPIXEL, TCHANNEL >::~TPixel ( )
inline

Výchozí destruktor.

Definition at line 57 of file TPixel.hpp.

{ }

Member Function Documentation

template<typename TPIXEL, typename TCHANNEL>
TCHANNEL app::TPixel< TPIXEL, TCHANNEL >::getChannel ( unsigned  index)
inline

Vrátí hodnotu kanálu s daným indexem.

Vrátí hodnotu kanálu s daným indexem. Přípustný je index 0 až 3, meze se nekontrolují.

Parameters
indexIndex.
Returns
Hodnota kanálu.

Definition at line 67 of file TPixel.hpp.

{
return *(((TCHANNEL *) &value) + index);
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::getNormalized ( double &  ch0,
double &  ch1,
double &  ch2,
double &  ch3,
TPIXEL const *  src 
)
inlinestatic

Extrahuje z pixelu normalizované hodnoty kanálů

Extrahuje z pixelu normalizované hodnoty kanálů. Předpokládá pixel o 4 kanálech a vrátí normalizované hodnoty na rozsahu 0..1.

Parameters
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.
srcExtrahovaný pixel.

Definition at line 108 of file TPixel.hpp.

{
TCHANNEL const * ptr = (TCHANNEL *) src;
ch0 = *ptr / (double) maxChannel; ptr++;
ch1 = *ptr / (double) maxChannel; ptr++;
ch2 = *ptr / (double) maxChannel; ptr++;
ch3 = *ptr / (double) maxChannel;
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::getNormalized ( double &  ch0,
double &  ch1,
double &  ch2,
double &  ch3 
)
inline

Extrahuje z pixelu normalizované hodnoty kanálů

Extrahuje z pixelu normalizované hodnoty kanálů. Vrátí normalizované hodnoty na rozsahu 0..1.

Parameters
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.

Definition at line 124 of file TPixel.hpp.

{
getNormalized(ch0, ch1, ch2, ch3, &value);
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::HLS_RGB ( )
inline

Provede převod z HLS do RGB.

Provede převod z HLS do RGB, hodnoty h, l, s budou při převodu upraveny - používají se jako pomocné proměnné!

Parameters
h
l
s
r
g
b

Definition at line 333 of file TPixel.hpp.

{
double r, g, b, h, l, s, a;
getNormalized(h, l, s, a);
HLS_RGB_normalized(h, l, s, r, g, b);
setNormalized(r, g, b, a);
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::HLS_RGB_normalized ( double &  h,
double &  l,
double &  s,
double &  r,
double &  g,
double &  b 
)
inlinestatic

Definition at line 305 of file TPixel.hpp.

{
int c1; double c2, d, w, x, y, z;
if (l == 0) { r = 0; g = 0; b = 0; return; }
if (l == 1) { r = 1; g = 1; b = 1; return; }
h *= 6; h = (h) - (int) (h / 6);
c1 = h; c2 = h - c1;
d = (l <= 0.5) ? s * l : s * (1 - l);
w = l + d; x = l - d; y = w - (w - x) * c2; z = x + (w - x) * c2;
switch (c1) {
case 0: r = w; g = z; b = x; break;
case 1: r = y; g = w; b = x; break;
case 2: r = x; g = w; b = z; break;
case 3: r = x; g = y; b = w; break;
case 4: r = z; g = x; b = w; break;
case 5: r = w; g = x; b = y; break;
}
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::HSV_RGB ( )
inline

Provede převod z HSV do RGB.

Definition at line 251 of file TPixel.hpp.

{
double r, g, b, h, s, v, a;
getNormalized(h, s, v, a);
HSV_RGB_normalized(h, s, v, r, g, b);
setNormalized(r, g, b, a);
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::HSV_RGB_normalized ( double &  h,
double &  s,
double &  v,
double &  r,
double &  g,
double &  b 
)
inlinestatic

Provede převod z HSV do RGB.

Provede převod z HSV do RGB, hodnoty h, s, v budou při převodu upraveny - používají se jako pomocné proměnné!

Parameters
h
s
v
r
g
b

Definition at line 235 of file TPixel.hpp.

{
int c1; double c2, x, y, z;
h *= 6; h = h - (int) (h / 6); // h = (6 * h) % 6; // Takto je to z definice, ale C++ prská nad zbytkem.
c1 = h; c2 = h - c1;
x = (1 - s) * v; y = (1 - (s * c2)) * v; z = (1 - s * (1 - c2)) * v;
switch (c1) {
case 0: r = v; g = z; b = x; break;
case 1: r = y; g = v; b = x; break;
case 2: r = x; g = v; b = z; break;
case 3: r = x; g = y; b = v; break;
case 4: r = z; g = x; b = v; break;
case 5: r = v; g = x; b = y; break;
}
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::RGB_HLS ( )
inline

Převede pixel z RGB do HLS.

Definition at line 298 of file TPixel.hpp.

{
double r, g, b, h, s, v, a;
getNormalized(r, g, b, a);
RGB_HLS_normalized(r, g, b, h, s, v);
setNormalized(h, s, v, a);
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::RGB_HLS_normalized ( double &  r,
double &  g,
double &  b,
double &  h,
double &  l,
double &  s 
)
inlinestatic

Provede převod z RGB do HLS.

Provede převod z RGB do HLS, hodnoty r, g, b budou při převodu upraveny - používají se jako pomocné proměnné!

Parameters
r
g
b
h
l
s

Definition at line 270 of file TPixel.hpp.

{
double cHigh, cLow, cRng; int max;
if (r > g) {
if (r > b) { cHigh = r; max = 1; } else { cHigh = b; max = 3; }
cLow = (g < b) ? g : b;
} else { if (g > b) { cHigh = g; max = 2; } else { cHigh = b; max = 3; }
cLow = (r < b) ? r : b;
}
cRng = cHigh - cLow;
l = (cHigh + cLow) / 2;
if ((l == 0) || (l == 1)) {
s = 0;
} else if (l <= 0.5) {
s = 0.5 * cRng / l;
} else {
s = 0.5 * cRng / (1 - l);
}
r = (cHigh - r) / cRng; g = (cHigh - g) / cRng; b = (cHigh - b) / cRng;
switch (max) {
case 1: h = b - g; break;
case 2: h = r - b + 2; break;
case 3: h = g - r + 4; break;
}
h = (h < 0) ? h + 6 : h; h /= 6;
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::RGB_HSV ( )
inline

Převede pixel z RGB do HSV.

Definition at line 218 of file TPixel.hpp.

{
double r, g, b, h, s, v, a;
getNormalized(r, g, b, a);
RGB_HSV_normalized(r, g, b, h, s, v);
setNormalized(h, s, v, a);
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::RGB_HSV_normalized ( double &  r,
double &  g,
double &  b,
double &  h,
double &  s,
double &  v 
)
inlinestatic

Provede převod z RGB do HSV.

Provede převod z RGB do HSV, hodnoty r, g, b budou při převodu upraveny - používají se jako pomocné proměnné!

Parameters
r
g
b
h
s
v

Definition at line 195 of file TPixel.hpp.

{
double cHigh, cLow, cRng; int max;
if (r > g) {
if (r > b) { cHigh = r; max = 1; } else { cHigh = b; max = 3; }
cLow = (g < b) ? g : b;
} else {
if (g > b) { cHigh = g; max = 2; } else { cHigh = b; max = 3; }
cLow = (r < b) ? r : b;
}
cRng = cHigh - cLow;
v = cHigh; // s = (cHigh > 0) ? (cRng / cHigh) : 0; // S // staré z PoDIP, EasyRGB.com to dělá takto...
if (cHigh <= 0) { s = 0; h = 0; return; }
s = cRng / cHigh;
r = (cHigh - r) / cRng; g = (cHigh - g) / cRng; b = (cHigh - b) / cRng;
switch (max) {
case 1: h = b - g; break;
case 2: h = r - b + 2; break;
case 3: h = g - r + 4; break;
}
h = (h < 0) ? h + 6 : h; h /= 6; // EasyRGB to dělá trochu jinak, ale má 2 ify...
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::setChannel ( unsigned  index,
TCHANNEL  newVal 
)
inline

Nastaví hodnotu kanálu s daným indexem.

Nastaví hodnotu kanálu s daným indexem. Přípustný je index 0 až 3, meze se nekontrolují.

Parameters
indexIndex.
newValNová hodnota.

Definition at line 77 of file TPixel.hpp.

{
*(((TCHANNEL *) &value) + index) = newVal;
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::setChannels ( TCHANNEL  ch0,
TCHANNEL  ch1,
TCHANNEL  ch2,
TCHANNEL  ch3 
)
inline

Nastaví hodnotu dle zadaných hodnot kanálů

Nastaví hodnotu dle zadaných hodnot kanálů

Parameters
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.

Definition at line 91 of file TPixel.hpp.

{
TCHANNEL * ptr = (TCHANNEL *) &value;
*ptr = ch0; ptr++;
*ptr = ch1; ptr++;
*ptr = ch2; ptr++;
*ptr = ch3;
}
template<typename TPIXEL, typename TCHANNEL>
static void app::TPixel< TPIXEL, TCHANNEL >::setNormalized ( TPIXEL *  dst,
const double &  ch0,
const double &  ch1,
const double &  ch2,
const double &  ch3 
)
inlinestatic

Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů.

Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů. Předpokládá 4 kanálový pixel a hodnoty 0..1 pro kanály.

Parameters
dstCílový pixel.
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.

Definition at line 150 of file TPixel.hpp.

{
TCHANNEL * ptr = (TCHANNEL *) dst;
*ptr = ch0 * maxChannel + 0.5; ptr++;
*ptr = ch1 * maxChannel + 0.5; ptr++;
*ptr = ch2 * maxChannel + 0.5; ptr++;
*ptr = ch3 * maxChannel + 0.5;
}
template<typename TPIXEL, typename TCHANNEL>
void app::TPixel< TPIXEL, TCHANNEL >::setNormalized ( const double &  ch0,
const double &  ch1,
const double &  ch2,
const double &  ch3 
)
inline

Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů.

Nastaví hodnotu pixelu na základě normalizovaných hodnot kanálů. Předpokládá hodnoty 0..1 pro kanály.

Parameters
ch0Kanál 0.
ch1Kanál 1.
ch2Kanál 2.
ch3Kanál 3.

Definition at line 166 of file TPixel.hpp.

{
setNormalized(&value, ch0, ch1, ch2, ch3);
}

Member Data Documentation

template<typename TPIXEL, typename TCHANNEL>
const TCHANNEL TPixel< TPIXEL, TCHANNEL >::maxChannel = ~0
static

Maximální přípustná hodnota kanálu, uvažuje se bezznaménkový celočíselný typ, tedy ~0.

Definition at line 31 of file TPixel.hpp.

template<typename TPIXEL, typename TCHANNEL>
TPIXEL app::TPixel< TPIXEL, TCHANNEL >::value

Hodnota pixelu.

Definition at line 32 of file TPixel.hpp.


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