ACF $AcfVersion:0$
Public Types | Public Member Functions | List of all members
icmm::CRgb Class Reference

Primitive for representation of RGB color values. More...

#include <CRgb.h>

Inheritance diagram for icmm::CRgb:
icmm::TComposedColor< 3 > imath::TVector< Size, Element > iser::ISerializable istd::IChangeable istd::IPolymorphic

Public Types

enum  ComponentIndex { CI_RED , CI_GREEN , CI_BLUE , CI_LAST = CI_BLUE }
 
typedef TComposedColor< 3 > BaseClass
 
- Public Types inherited from icmm::TComposedColor< 3 >
typedef imath::TVector< Size > BaseClass
 
typedef BaseClass::Elements Elements
 
- Public Types inherited from imath::TVector< Size, Element >
typedef Element ElementType
 
typedef Element Elements[Size]
 
- Public Types inherited from istd::IChangeable
enum  ChangeFlags {
  CF_ACF_INTERNAL = 0 , CF_ALL_DATA , CF_ANY , CF_DESTROYING ,
  CF_DELEGATED , CF_NO_UNDO
}
 Data model change notification flags. More...
 
enum  SupportedOperations {
  SO_NONE = 0 , SO_OBSERVE = 1 << 0 , SO_COPY = 1 << 1 , SO_CLONE = 1 << 2 ,
  SO_COMPARE = 1 << 3 , SO_RESET = 1 << 4
}
 Flags for supported operations. More...
 
enum  CompatibilityMode { CM_STRICT , CM_WITHOUT_REFS , CM_WITH_REFS , CM_CONVERT }
 Control how relationship betweeen objects are interpreted. More...
 
typedef QMultiMap< QByteArray, QVariant > ChangeInfoMap
 

Public Member Functions

 CRgb (double r=0.0, double g=0.0, double b=0.0)
 
 CRgb (const CRgb &color)
 
double GetRed () const
 
void SetRed (double value)
 
double GetGreen () const
 
void SetGreen (double value)
 
double GetBlue () const
 
void SetBlue (double value)
 
virtual bool Serialize (iser::IArchive &archive) override
 Load or store state of this object as a archive stream.
 
CRgb operator+ (const CRgb &color) const
 
CRgb operator- (const CRgb &color) const
 
CRgb operator* (const CRgb &color) const
 
CRgb operator/ (const CRgb &color) const
 
CRgb operator* (double value) const
 
CRgb operator/ (double value) const
 
CRgboperator= (const CRgb &color)
 
const CRgboperator+= (const CRgb &color)
 
const CRgboperator-= (const CRgb &color)
 
const CRgboperator*= (const CRgb &color)
 
const CRgboperator/= (const CRgb &color)
 
const CRgboperator*= (double value)
 
const CRgboperator/= (double value)
 
- Public Member Functions inherited from icmm::TComposedColor< 3 >
 TComposedColor ()
 
 TComposedColor (const BaseClass &value)
 
 TComposedColor (const imath::CVarVector &vector)
 
 TComposedColor (const TComposedColor< Size > &color)=default
 
void GetRounded (const imath::IDoubleManip &manipulator, TComposedColor< Size > &result)
 Get color after components value rounding with specified precision.
 
bool IsRoundedEqual (const TComposedColor< Size > &color, const imath::IDoubleManip &manipulator) const
 Check if two values are equal after rounding.
 
bool IsSimilar (const TComposedColor< Size > &color, double tolerance=I_BIG_EPSILON) const
 Allows to compare two colors with tolerance.
 
bool IsNormalized () const
 Check if this color value is normalized.
 
void Normalize ()
 Make this color to be normalized.
 
void GetNormalized (TComposedColor< Size > &result) const
 Get normalized color.
 
TComposedColor< Size > operator+ (const TComposedColor< Size > &color) const
 
TComposedColor< Size > operator- (const TComposedColor< Size > &color) const
 
TComposedColor< Size > operator* (const TComposedColor< Size > &color) const
 
TComposedColor< Size > operator* (double value) const
 
TComposedColor< Size > operator/ (const TComposedColor< Size > &color) const
 
TComposedColor< Size > operator/ (double value) const
 
const TComposedColor< Size > & operator= (const TComposedColor< Size > &color)
 
const TComposedColor< Size > & operator= (double colorValue)
 
const TComposedColor< Size > & operator+= (const TComposedColor< Size > &color)
 
const TComposedColor< Size > & operator-= (const TComposedColor< Size > &color)
 
const TComposedColor< Size > & operator*= (const TComposedColor< Size > &color)
 
const TComposedColor< Size > & operator*= (double value)
 
const TComposedColor< Size > & operator/= (const TComposedColor< Size > &color)
 
const TComposedColor< Size > & operator/= (double value)
 
- Public Member Functions inherited from imath::TVector< Size, Element >
 TVector ()
 Creates an uninitialized vector.
 
 TVector (const TVector< Size, Element > &vector)
 Creates a copy of another vector.
 
 TVector (std::initializer_list< Element > values)
 Creates a vector from an initializer list.
 
const Element & GetElement (int i) const
 Gets the element at the specified index (read-only).
 
Element & GetElementRef (int i)
 Gets a reference to the element at the specified index (read-write).
 
void SetElement (int i, const Element &value)
 Sets the element at the specified index.
 
void SetAllElements (const Element &value)
 Sets all elements to the same value.
 
void Reset ()
 Sets all coordinates to zero.
 
void Clear ()
 Sets all coordinates to zero.
 
const TVector< Size, Element >::ElementsGetElements () const
 Get read-only access to internal element container.
 
TVector< Size, Element >::ElementsGetElementsRef ()
 Get access to internal element container.
 
void Translate (const TVector< Size, Element > &vector)
 Translates (adds) another vector to this vector.
 
TVector< Size, Element > GetTranslated (const TVector< Size, Element > &vector)
 Returns a new vector that is the translation of this vector.
 
void GetTranslated (const TVector< Size, Element > &vector, TVector< Size, Element > &result)
 Computes the translated vector and stores it in the result parameter.
 
void ScaledCumulate (const TVector< Size, Element > &vector, Element scale)
 Adds a scaled vector to this vector.
 
bool IsNull (Element tolerance=I_BIG_EPSILON) const
 Checks if this vector is null (all elements approximately zero).
 
Element GetDotProduct (const TVector< Size, Element > &vector) const
 Calculates the dot product with another vector.
 
Element GetLength2 () const
 Calculates the squared Euclidean length of the vector.
 
Element GetLength () const
 Calculates the Euclidean length (magnitude) of the vector.
 
Element GetDistance2 (const TVector< Size, Element > &vector) const
 Calculates the squared distance to another vector.
 
Element GetDistance (const TVector< Size, Element > &vector) const
 Calculates the Euclidean distance to another vector.
 
Element GetElementsSum () const
 Calculates the sum of all vector elements.
 
bool Normalize (Element length=1.0)
 Normalizes the vector to a specified length.
 
bool GetNormalized (TVector< Size, Element > &result, Element length=1.0) const
 Returns a normalized copy of this vector with specified length.
 
void GetMinimal (const TVector< Size, Element > &vector, TVector< Size, Element > &result) const
 Get vector with minimal elements values.
 
void GetMaximal (const TVector< Size, Element > &vector, TVector< Size, Element > &result) const
 Get vector with maximal elements values.
 
bool Serialize (iser::IArchive &archive)
 Serialize this vector to specified archive.
 
bool operator== (const TVector< Size, Element > &vector) const
 
bool operator!= (const TVector< Size, Element > &vector) const
 
bool operator< (const TVector< Size, Element > &vector) const
 
bool operator> (const TVector< Size, Element > &vector) const
 
bool operator<= (const TVector< Size, Element > &vector) const
 
bool operator>= (const TVector< Size, Element > &vector) const
 
TVector< Size, Element > & operator= (const TVector< Size, Element > &vector)=default
 
TVector< Size, Element > operator- () const
 
TVector< Size, Element > operator+ (const TVector< Size, Element > &vector) const
 
TVector< Size, Element > operator- (const TVector< Size, Element > &vector) const
 
TVector< Size, Element > operator* (Element scalar) const
 
TVector< Size, Element > operator/ (Element scalar) const
 
TVector< Size, Element > & operator+= (const TVector< Size, Element > &vector)
 
TVector< Size, Element > & operator-= (const TVector< Size, Element > &vector)
 
TVector< Size, Element > & operator*= (Element scalar)
 
TVector< Size, Element > & operator/= (Element scalar)
 
const Element & operator[] (int i) const
 
Element & operator[] (int i)
 
- Public Member Functions inherited from iser::ISerializable
virtual quint32 GetMinimalVersion (int versionId) const
 Get minimal needed version to correct storing of this data.
 
- Public Member Functions inherited from istd::IChangeable
virtual int GetSupportedOperations () const
 Get set of flags for supported operations.
 
virtual bool CopyFrom (const IChangeable &object, CompatibilityMode mode=CM_WITHOUT_REFS)
 Copy this object from another one.
 
virtual bool IsEqual (const IChangeable &object) const
 Compare this object with another object.
 
virtual istd::TUniqueInterfacePtr< istd::IChangeableCloneMe (CompatibilityMode mode=CM_WITHOUT_REFS) const
 Make a copy of this object.
 
virtual bool ResetData (CompatibilityMode mode=CM_WITHOUT_REFS)
 Reset data to its default state.
 
virtual void BeginChanges (const ChangeSet &changeSet)
 Starts the change transaction.
 
virtual void EndChanges (const ChangeSet &changeSet)
 Ends the change transaction.
 
virtual void BeginChangeGroup (const ChangeSet &changeSet)
 Starts group of changes.
 
virtual void EndChangeGroup (const ChangeSet &changeSet)
 Ends group of changes.
 
- Public Member Functions inherited from istd::IPolymorphic
virtual ~IPolymorphic ()
 

Additional Inherited Members

- Static Public Member Functions inherited from imath::TVector< Size, Element >
static int GetElementsCount ()
 Get number of elements.
 
static bool SetElementsCount (int count)
 Set number of elements.
 
static const TVector< Size, Element > & GetZero ()
 Get vector with all coordinates set to 0.
 
- Static Public Member Functions inherited from istd::IChangeable
static const ChangeSetGetNoChanges ()
 Get empty set of changes.
 
static const ChangeSetGetAnyChange ()
 Get anonymous change set.
 
static const ChangeSetGetAllChanges ()
 Get anonymous change set.
 
static const ChangeSetGetDelegatedChanges ()
 Get delegated change set.
 
- Protected Member Functions inherited from istd::IChangeable
virtual void OnBeginChanges ()
 Callback function for begin change event.
 
virtual void OnEndChanges (const ChangeSet &changeSet)
 Callback function for end change event.
 
- Protected Attributes inherited from imath::TVector< Size, Element >
Elements m_elements
 

Detailed Description

Primitive for representation of RGB color values.

Purpose

CRgb represents a color in the RGB (Red, Green, Blue) additive color model. This is the standard color representation for displays, digital images, and light-based color mixing. Each component typically ranges from 0.0 (no intensity) to 1.0 (full intensity), though values outside this range are permitted for HDR (High Dynamic Range) applications.

RGB Color Model

RGB is an additive color model where colors are created by adding together red, green, and blue light:

Usage Examples

// Example 1: Creating RGB colors
icmm::CRgb black(0.0, 0.0, 0.0);
icmm::CRgb white(1.0, 1.0, 1.0);
icmm::CRgb red(1.0, 0.0, 0.0);
icmm::CRgb green(0.0, 1.0, 0.0);
icmm::CRgb blue(0.0, 0.0, 1.0);
icmm::CRgb yellow(1.0, 1.0, 0.0);
icmm::CRgb magenta(1.0, 0.0, 1.0);
icmm::CRgb cyan(0.0, 1.0, 1.0);
icmm::CRgb gray(0.5, 0.5, 0.5);
// Example 2: Accessing and modifying components
icmm::CRgb color;
color.SetRed(0.8);
color.SetGreen(0.3);
color.SetBlue(0.2);
double r = color.GetRed();
double g = color.GetGreen();
double b = color.GetBlue();
// Example 3: Color arithmetic
icmm::CRgb color1(0.8, 0.3, 0.2);
icmm::CRgb color2(0.2, 0.5, 0.7);
// Add colors (lighten)
icmm::CRgb lighter = color1 + color2; // {1.0, 0.8, 0.9}
// Multiply colors (darken/tint)
icmm::CRgb tinted = color1 * color2; // {0.16, 0.15, 0.14}
// Scale color (adjust brightness)
icmm::CRgb brighter = color1 * 1.5; // {1.2, 0.45, 0.3} (HDR)
icmm::CRgb dimmer = color1 * 0.5; // {0.4, 0.15, 0.1}
// Example 4: Color blending
icmm::CRgb BlendColors(const icmm::CRgb& a,
const icmm::CRgb& b,
double t) // t in [0, 1]
{
// Linear interpolation
return a * (1.0 - t) + b * t;
}
icmm::CRgb startColor(1.0, 0.0, 0.0); // Red
icmm::CRgb endColor(0.0, 0.0, 1.0); // Blue
icmm::CRgb midColor = BlendColors(startColor, endColor, 0.5); // Purple
// Example 5: Grayscale conversion
double ToGrayscale(const icmm::CRgb& color)
{
// Perceptual grayscale (ITU-R BT.709)
return 0.2126 * color.GetRed() +
0.7152 * color.GetGreen() +
0.0722 * color.GetBlue();
}
// Example 6: Color clamping
icmm::CRgb ClampToValidRange(const icmm::CRgb& color)
{
icmm::CRgb result = color;
result.SetRed(qBound(0.0, color.GetRed(), 1.0));
result.SetGreen(qBound(0.0, color.GetGreen(), 1.0));
result.SetBlue(qBound(0.0, color.GetBlue(), 1.0));
return result;
}
// Example 7: Serialization
void SaveColor(const icmm::CRgb& color, const QString& filename)
{
ifile::CFileWriteArchive archive(filename);
if (archive.IsOpen()) {
icmm::CRgb copy = color;
copy.Serialize(archive);
}
}
void LoadColor(icmm::CRgb& color, const QString& filename)
{
ifile::CFileReadArchive archive(filename);
if (archive.IsOpen()) {
color.Serialize(archive);
}
}
// Example 8: Gamma correction
icmm::CRgb ApplyGamma(const icmm::CRgb& linear, double gamma)
{
return icmm::CRgb(
qPow(linear.GetRed(), 1.0 / gamma),
qPow(linear.GetGreen(), 1.0 / gamma),
qPow(linear.GetBlue(), 1.0 / gamma)
);
}
icmm::CRgb RemoveGamma(const icmm::CRgb& srgb, double gamma)
{
return icmm::CRgb(
qPow(srgb.GetRed(), gamma),
qPow(srgb.GetGreen(), gamma),
qPow(srgb.GetBlue(), gamma)
);
}
Primitive for representation of RGB color values.
Definition CRgb.h:168
double GetBlue() const
Definition CRgb.h:256
void SetBlue(double value)
Definition CRgb.h:262
virtual bool Serialize(iser::IArchive &archive) override
Load or store state of this object as a archive stream.
void SetGreen(double value)
Definition CRgb.h:250
double GetGreen() const
Definition CRgb.h:244
double GetRed() const
Definition CRgb.h:232
void SetRed(double value)
Definition CRgb.h:238
Simple implementation of archive reading from own ACF format binary file.
Simple implementation of archive writing to own ACF format binary file.

Component Range

Supported Operations

Best Practices

Note
Component values are stored as doubles and typically range from 0.0 to 1.0, though values outside this range are permitted.
See also
icmm::TComposedColor, icmm::CRgbColorModel, icmm::CHsv, icmm::CSRgbColor

Definition at line 167 of file CRgb.h.

Member Typedef Documentation

◆ BaseClass

Definition at line 170 of file CRgb.h.

Member Enumeration Documentation

◆ ComponentIndex

Enumerator
CI_RED 
CI_GREEN 
CI_BLUE 
CI_LAST 

Definition at line 172 of file CRgb.h.

Constructor & Destructor Documentation

◆ CRgb() [1/2]

icmm::CRgb::CRgb ( double  r = 0.0,
double  g = 0.0,
double  b = 0.0 
)
inline

Definition at line 216 of file CRgb.h.

References CI_BLUE, CI_GREEN, CI_RED, and imath::TVector< Size, Element >::SetElement().

◆ CRgb() [2/2]

icmm::CRgb::CRgb ( const CRgb color)
inline

Definition at line 224 of file CRgb.h.

Member Function Documentation

◆ GetBlue()

double icmm::CRgb::GetBlue ( ) const
inline

Definition at line 256 of file CRgb.h.

References CI_BLUE, and imath::TVector< Size, Element >::GetElement().

◆ GetGreen()

double icmm::CRgb::GetGreen ( ) const
inline

Definition at line 244 of file CRgb.h.

References CI_GREEN, and imath::TVector< Size, Element >::GetElement().

◆ GetRed()

double icmm::CRgb::GetRed ( ) const
inline

Definition at line 232 of file CRgb.h.

References CI_RED, and imath::TVector< Size, Element >::GetElement().

◆ operator*() [1/2]

CRgb icmm::CRgb::operator* ( const CRgb color) const
inline

Definition at line 290 of file CRgb.h.

◆ operator*() [2/2]

CRgb icmm::CRgb::operator* ( double  value) const
inline

Definition at line 310 of file CRgb.h.

◆ operator*=() [1/2]

const CRgb & icmm::CRgb::operator*= ( const CRgb color)
inline

Definition at line 354 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator*=().

◆ operator*=() [2/2]

const CRgb & icmm::CRgb::operator*= ( double  value)
inline

Definition at line 370 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator*=().

◆ operator+()

CRgb icmm::CRgb::operator+ ( const CRgb color) const
inline

Definition at line 270 of file CRgb.h.

◆ operator+=()

const CRgb & icmm::CRgb::operator+= ( const CRgb color)
inline

Definition at line 338 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator+=().

◆ operator-()

CRgb icmm::CRgb::operator- ( const CRgb color) const
inline

Definition at line 280 of file CRgb.h.

◆ operator-=()

const CRgb & icmm::CRgb::operator-= ( const CRgb color)
inline

Definition at line 346 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator-=().

◆ operator/() [1/2]

CRgb icmm::CRgb::operator/ ( const CRgb color) const
inline

Definition at line 300 of file CRgb.h.

◆ operator/() [2/2]

CRgb icmm::CRgb::operator/ ( double  value) const
inline

Definition at line 320 of file CRgb.h.

◆ operator/=() [1/2]

const CRgb & icmm::CRgb::operator/= ( const CRgb color)
inline

Definition at line 362 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator/=().

◆ operator/=() [2/2]

const CRgb & icmm::CRgb::operator/= ( double  value)
inline

Definition at line 378 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator/=().

◆ operator=()

CRgb & icmm::CRgb::operator= ( const CRgb color)
inline

Definition at line 330 of file CRgb.h.

References icmm::TComposedColor< 3 >::operator=().

◆ Serialize()

virtual bool icmm::CRgb::Serialize ( iser::IArchive archive)
overridevirtual

Load or store state of this object as a archive stream.

Type of operation is depending on archive type.

See also
iser::IArchive

Reimplemented from icmm::TComposedColor< 3 >.

◆ SetBlue()

void icmm::CRgb::SetBlue ( double  value)
inline

Definition at line 262 of file CRgb.h.

References CI_BLUE, and imath::TVector< Size, Element >::SetElement().

◆ SetGreen()

void icmm::CRgb::SetGreen ( double  value)
inline

Definition at line 250 of file CRgb.h.

References CI_GREEN, and imath::TVector< Size, Element >::SetElement().

◆ SetRed()

void icmm::CRgb::SetRed ( double  value)
inline

Definition at line 238 of file CRgb.h.

References CI_RED, and imath::TVector< Size, Element >::SetElement().


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