ACF $AcfVersion:0$
Public Member Functions | Protected Attributes | List of all members
icmm::CRgbColorModel Class Reference

Concrete RGB color model implementation. More...

#include <CRgbColorModel.h>

Inheritance diagram for icmm::CRgbColorModel:
icmm::IColorModel istd::IChangeable istd::IPolymorphic icmm::CRgbaColorModel

Public Member Functions

 CRgbColorModel ()
 
 CRgbColorModel (const ITristimulusSpecification &spec)
 Sets a particular TristimulusSpecification, for example, if the RGB color is originating from Lab.
 
virtual ModelType GetModelType () const override
 Gets the type of the color model.
 
virtual ModelClass GetModelClass () const override
 Gets the classification of the color model.
 
virtual ColorSpaceClass GetColorSpaceClass () const override
 Gets the classification of the color space defined by this model.
 
virtual int GetColorSpaceDimensionality () const override
 Gets the dimensionality (number of components) of the color space.
 
virtual const imath::IUnitInfoGetColorSpaceComponentInfo (int componentIndex) const override
 Gets mathematical unit information for a color model component.
 
virtual QString GetColorSpaceComponentName (int componentIndex) const override
 Gets the human-readable name of a color model component.
 
virtual const icmm::IColorTransformationCreateColorTranformation (const IColorModel &otherColorModel, const QByteArray &transformationId) const override
 Creates a color transformation for conversion to another color model.
 
virtual IColorSpecification::ConstColorSpecPtr GetSpecification () const override
 Gets the color specification for this model, if available.
 
virtual int GetSupportedOperations () const override
 Get set of flags for supported operations.
 
virtual bool CopyFrom (const istd::IChangeable &object, CompatibilityMode mode=CM_WITHOUT_REFS) override
 Copy this object from another one.
 
virtual istd::IChangeableUniquePtr CloneMe (CompatibilityMode mode=CM_WITHOUT_REFS) const override
 Make a copy of this object.
 
- Public Member Functions inherited from istd::IChangeable
virtual bool IsEqual (const IChangeable &object) const
 Compare this object with another 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 ()
 

Protected Attributes

imath::CGeneralUnitInfo m_unitInfo
 
CTristimulusSpecification m_spec
 

Additional Inherited Members

- Public Types inherited from icmm::IColorModel
enum  ModelType {
  MT_HSI , MT_HSV , MT_HSL , MI_YIQ ,
  MI_YUV , MI_YCBCR , MT_RGB , MT_COLORANTS ,
  MT_LUV , MT_LAB , MT_LCH , MT_XYZ ,
  MT_YXY , MI_SPECTRAL , MI_USER = 1024
}
 
enum  ModelClass { MC_DEVICE_DEPENDENT , MC_DEVICE_INDEPENDENT }
 
enum  ColorSpaceClass { CSC_ADDITIVE , CSC_SUBSTRACTIVE , CSC_PERCEPTUAL }
 
- 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
 
- 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.
 

Detailed Description

Concrete RGB color model implementation.

Purpose

CRgbColorModel provides a complete implementation of the RGB color model interface. It represents the standard additive RGB color space with three components (Red, Green, Blue) and optionally includes a tristimulus specification for device-independent color management.

Features

Usage Examples

// Example 1: Basic RGB color model
// Query properties
IColorModel::ModelType type = rgbModel.GetModelType(); // MT_RGB
int dims = rgbModel.GetColorSpaceDimensionality(); // 3
// Get component names
QString red = rgbModel.GetColorSpaceComponentName(0); // "Red"
QString green = rgbModel.GetColorSpaceComponentName(1); // "Green"
QString blue = rgbModel.GetColorSpaceComponentName(2); // "Blue"
// Example 2: Creating transformations
icmm::CHsvColorModel hsvModel;
// Create RGB to HSV transformation
const icmm::IColorTransformation* rgbToHsv =
rgbModel.CreateColorTranformation(hsvModel);
if (rgbToHsv) {
// Convert RGB color to HSV
rgb.SetElement(0, 1.0); // Red
rgb.SetElement(1, 0.5); // Green
rgb.SetElement(2, 0.0); // Blue
rgbToHsv->Calculate(rgb, hsv);
delete rgbToHsv;
}
// Example 3: RGB model with specification
// Create specification with primaries and white point
// Set D65 white point, Rec.709 primaries, etc.
icmm::CRgbColorModel calibratedRgb(spec);
// This model now has color specification for accurate conversions
calibratedRgb.GetSpecification();
// Example 4: Checking component information
const imath::IUnitInfo* redInfo =
if (redInfo) {
double minVal = redInfo->GetMinValue(); // 0.0
double maxVal = redInfo->GetMaxValue(); // 1.0
}
// Example 5: Converting colors via model
void ConvertRgbToLab(const icmm::CVarColor& rgbColor)
{
const icmm::IColorTransformation* transform =
rgbModel.CreateColorTranformation(labModel);
if (transform) {
icmm::CVarColor labColor;
if (transform->Calculate(rgbColor, labColor)) {
// Use Lab color
double L = labColor.GetElement(0);
double a = labColor.GetElement(1);
double b = labColor.GetElement(2);
}
delete transform;
}
}
CCieLabColorModel implements the CIE Lab color model.
Concrete RGB color model implementation.
virtual QString GetColorSpaceComponentName(int componentIndex) const override
Gets the human-readable name of a color model component.
virtual ModelType GetModelType() const override
Gets the type of the color model.
virtual const icmm::IColorTransformation * CreateColorTranformation(const IColorModel &otherColorModel, const QByteArray &transformationId) const override
Creates a color transformation for conversion to another color model.
virtual int GetColorSpaceDimensionality() const override
Gets the dimensionality (number of components) of the color space.
virtual const imath::IUnitInfo * GetColorSpaceComponentInfo(int componentIndex) const override
Gets mathematical unit information for a color model component.
Generic color implementation with variable number of color components.
Definition CVarColor.h:176
std::shared_ptr< const IColorSpecification > ConstColorSpecPtr
Basic interface for color transformations between color models.
double GetElement(int index) const
Get element at specified index.
Definition CVarVector.h:409
Common interface to get information about a measurement unit.
Definition IUnitInfo.h:22

Tristimulus Specification

When created with an ITristimulusSpecification, the RGB model includes:

Available Transformations

CRgbColorModel can create transformations to:

Best Practices

See also
icmm::IColorModel, icmm::CRgb, icmm::ITristimulusSpecification, icmm::CRgbToHsvTranformation, icmm::CRgbToCmykTransformation

Definition at line 133 of file CRgbColorModel.h.

Constructor & Destructor Documentation

◆ CRgbColorModel() [1/2]

icmm::CRgbColorModel::CRgbColorModel ( )

◆ CRgbColorModel() [2/2]

icmm::CRgbColorModel::CRgbColorModel ( const ITristimulusSpecification spec)

Sets a particular TristimulusSpecification, for example, if the RGB color is originating from Lab.

Member Function Documentation

◆ CloneMe()

virtual istd::IChangeableUniquePtr icmm::CRgbColorModel::CloneMe ( CompatibilityMode  mode = CM_WITHOUT_REFS) const
overridevirtual

Make a copy of this object.

Returns
new instance or NULL, if this operation is not supported.

Reimplemented from istd::IChangeable.

◆ CopyFrom()

virtual bool icmm::CRgbColorModel::CopyFrom ( const istd::IChangeable object,
CompatibilityMode  mode = CM_WITHOUT_REFS 
)
overridevirtual

Copy this object from another one.

Default implementation in istd::IChangeable does nothing.

Reimplemented from istd::IChangeable.

◆ CreateColorTranformation()

virtual const icmm::IColorTransformation * icmm::CRgbColorModel::CreateColorTranformation ( const IColorModel otherColorModel,
const QByteArray &  transformationId 
) const
overridevirtual

Creates a color transformation for conversion to another color model.

Constructs and returns a transformation object that can convert colors from this model to the specified target model. The transformation may be direct or may internally use intermediate color spaces (typically XYZ).

Parameters
otherColorModelThe target color model to convert to
transformationIdOptional identifier for a specific transformation algorithm. Empty (default) uses the standard transformation.
Returns
Pointer to the created IColorTransformation, or nullptr if no transformation is available. Caller owns the returned pointer and must delete it when done.
Note
The returned transformation is newly allocated. Delete it after use.
Returns nullptr if no transformation path exists between the models.
For repeated conversions, cache the transformation for performance.
// Create RGB to Lab transformation
const IColorTransformation* transform =
rgbModel.CreateColorTranformation(labModel);
if (transform) {
// Use transformation
icmm::CVarColor rgbColor(3);
rgbColor.SetElement(0, 1.0); // Red
rgbColor.SetElement(1, 0.0); // Green
rgbColor.SetElement(2, 0.0); // Blue
icmm::CVarColor labColor;
transform->Calculate(rgbColor, labColor);
delete transform; // Clean up
}
See also
IColorTransformation, CVarColor

Implements icmm::IColorModel.

◆ GetColorSpaceClass()

virtual ColorSpaceClass icmm::CRgbColorModel::GetColorSpaceClass ( ) const
overridevirtual

Gets the classification of the color space defined by this model.

Indicates the physical basis of color mixing: additive (light-based), subtractive (pigment-based), or perceptual (human perception-based).

Returns
ColorSpaceClass classification
See also
ColorSpaceClass, GetModelType()

Implements icmm::IColorModel.

◆ GetColorSpaceComponentInfo()

virtual const imath::IUnitInfo * icmm::CRgbColorModel::GetColorSpaceComponentInfo ( int  componentIndex) const
overridevirtual

Gets mathematical unit information for a color model component.

Returns information about the mathematical unit, range, and properties of the specified component (axis) in the color space.

Parameters
componentIndexZero-based index of the component (0 to dimensionality-1)
Returns
Pointer to IUnitInfo describing the component's unit, or nullptr if index is invalid. The pointer is owned by the color model.
Note
Most color components range from 0.0 to 1.0, but some (like Lab) have different ranges (L: 0-100, a: -128 to 127, b: -128 to 127).
const imath::IUnitInfo* info = model->GetColorSpaceComponentInfo(0);
if (info) {
double minVal = info->GetMinValue();
double maxVal = info->GetMaxValue();
QString unit = info->GetUnitName();
}
virtual QString GetUnitName() const =0
Get name of unit.
See also
GetColorSpaceComponentName(), GetColorSpaceDimensionality()

Implements icmm::IColorModel.

Reimplemented in icmm::CRgbaColorModel.

◆ GetColorSpaceComponentName()

virtual QString icmm::CRgbColorModel::GetColorSpaceComponentName ( int  componentIndex) const
overridevirtual

Gets the human-readable name of a color model component.

Returns the name of the component at the specified index, such as "Red", "Green", "Blue" for RGB, or "Lightness", "a*", "b*" for Lab.

Parameters
componentIndexZero-based index of the component
Returns
Component name as a QString, or empty string if index is invalid
// Get RGB component names
QString name0 = rgb.GetColorSpaceComponentName(0); // "Red"
QString name1 = rgb.GetColorSpaceComponentName(1); // "Green"
QString name2 = rgb.GetColorSpaceComponentName(2); // "Blue"
See also
GetColorSpaceComponentInfo(), GetColorSpaceDimensionality()

Implements icmm::IColorModel.

Reimplemented in icmm::CRgbaColorModel.

Referenced by icmm::CRgbaColorModel::GetColorSpaceComponentName().

◆ GetColorSpaceDimensionality()

virtual int icmm::CRgbColorModel::GetColorSpaceDimensionality ( ) const
overridevirtual

Gets the dimensionality (number of components) of the color space.

Returns the number of values needed to represent a color in this model. Common values are 3 (RGB, HSV, Lab) or 4 (CMYK). Spectral models may have higher dimensionality.

Returns
Number of components/dimensions in the color space
// RGB has 3 components
int dims = rgbModel.GetColorSpaceDimensionality(); // returns 3
// CMYK has 4 components
dims = cmykModel.GetColorSpaceDimensionality(); // returns 4
CMYK color model implementation for four-color printing.
virtual int GetColorSpaceDimensionality() const override
Gets the dimensionality (number of components) of the color space.
See also
GetColorSpaceComponentName(), GetColorSpaceComponentInfo()

Implements icmm::IColorModel.

Reimplemented in icmm::CRgbaColorModel.

◆ GetModelClass()

virtual ModelClass icmm::CRgbColorModel::GetModelClass ( ) const
overridevirtual

Gets the classification of the color model.

Indicates whether the color model is device-dependent or device-independent. Device-dependent models (RGB, CMYK) produce different colors on different devices, while device-independent models (XYZ, Lab) represent absolute colors.

Returns
ModelClass classification
See also
ModelClass, GetModelType()

Implements icmm::IColorModel.

◆ GetModelType()

virtual ModelType icmm::CRgbColorModel::GetModelType ( ) const
overridevirtual

Gets the type of the color model.

Returns the specific type identifier for this color model (e.g., MT_RGB, MT_CMYK). This identifies the mathematical representation and component structure.

Returns
The ModelType enumeration value identifying this color model
See also
ModelType, GetModelClass(), GetColorSpaceClass()

Implements icmm::IColorModel.

◆ GetSpecification()

virtual IColorSpecification::ConstColorSpecPtr icmm::CRgbColorModel::GetSpecification ( ) const
overridevirtual

Gets the color specification for this model, if available.

Returns additional specification information about the color model, such as white point, primaries (for RGB), or viewing conditions (for Lab). Not all models have specifications.

Returns
Shared pointer to the color specification, or empty pointer if no specification is available
Note
This is optional metadata. Most basic operations don't require it.
See also
IColorSpecification

Reimplemented from icmm::IColorModel.

◆ GetSupportedOperations()

virtual int icmm::CRgbColorModel::GetSupportedOperations ( ) const
overridevirtual

Get set of flags for supported operations.

See also
SupportedOperations

Reimplemented from istd::IChangeable.

Member Data Documentation

◆ m_spec

CTristimulusSpecification icmm::CRgbColorModel::m_spec
protected

Definition at line 161 of file CRgbColorModel.h.

◆ m_unitInfo

imath::CGeneralUnitInfo icmm::CRgbColorModel::m_unitInfo
protected

Definition at line 160 of file CRgbColorModel.h.

Referenced by icmm::CRgbaColorModel::GetColorSpaceComponentInfo().


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