In order operate more easily with the components of the color spaces we shall define every color space as a structure.

Color space |
Structure |
Members |

RGB |
RgbFColor |
double R,G,B |

RGB |
RgbIColor |
uint8_t R,G,B |

HSI |
HsiColor |
double H,S,I |

HSL |
HslColor |
double H,S,L |

HSV |
HsvColor |
double H,S,V |

YIQ |
YiqColor |
double Y,I,Q |

YUV |
YuvColor |
double Y,U,V |

The

**RgbIColor**is associated with the RGB color space model and it will contain the R,G,B components expressed as

*natural numbers in the range [0,255]*.

The

**RbgFColor**is associated with the RGB color space model and it will contain the R,G,B components expressed as

*real numbers in the range [0.0, 1.0]*.

The

**HslColor**is associated with the HSL color space model and it will contain the H,S,L components expressed as

*real numbers where H is in the range [0.0, 360.0] and S and L are in the range [0.0, 1.0].*The

**HsvColor**is associated with the HSV color space model and it will contain the H,S,V components expressed as

*real numbers where H is in the range [0.0, 360.0] and S and V are in the range [0.0, 1.0].*The

**HsiColor**is associated with the HSI color space model and it will contain the H,S,I components expressed as

*real numbers where H is in the range [0.0, 360.0] and S and I are in the range [0.0, 1.0].*

The

**YiqColor**is associated with the YIQ color space model and it will contain the Y,I,Q components expressed as

*real numbers where Y is in the range [0.0, 1.0], I is in the range [-0.5957, 0.5957], Q is in the range [-0.5226, 0.5226].*

*The*

**YuvColor**is associated with the YUV color space model and it will contain the Y,U,V components expressed as

*real numbers where Y is in the range [0.0, 1.0], U is in the range [-0.436, 0.436], Q is in the range [-0.615, 0.615].*

We shall also define the following functions which will be used for the conversion algorithms:

/* * Description: * Checks if a value is within a specified interval * Parameters: * value - the value who is checked * lowerLimit - the lower limit of the interval * upperLimit - the upper limit of the interval * Returns: * true if the value is within the interval * false if the value is not within the interval */ bool RealIsWithinBounds(double value, double lowerLimit, double upperLimit); /* * Description: * Checks if a value is within a specified interval * Parameters: * value - the value who is checked * lowerLimit - the lower limit of the interval * upperLimit - the upper limit of the interval * Returns: * true if the value is within the interval * false if the value is not within the interval */ bool IntegerIsWithinBounds(uint8_t value, uint8_t lowerLimit, uint8_t upperLimit); /* * Description: * Returns the smallest of the three parameters * Parameters * r,g,b - 3 real numbers * Returns * The smallest real number from the set {r,g,b} */ double Double_GetMinimum(double r, double g, double b); /* * Description: * Returns the largest of the three parameters * Parameters * r,g,b - 3 real numbers * Returns * The largest real number from the set {r,g,b} */ double Double_GetMaximum(double r, double g, double b); /* * Description: * Checks if the RGB components are valid * Parameters: * r,g,b - the components of an RGB model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool RgbF_IsValid(double r, double g, double b); /* * Description: * Checks if the HSI components are valid * Parameters: * h,s,i - the components of an HSI model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool Hsi_IsValid(double h, double s, double i); /* * Description: * Checks if the RGB components are valid * Parameters: * r,g,b - the components of an RGB model expressed * as natural numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool RgbI_IsValid(uint8_t r, uint8_t g, uint8_t b); /* * Description: * Checks if the HSL components are valid * Parameters: * h,s,l - the components of an HSL model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool Hsl_IsValid(double h, double s, double l); /* * Description: * Checks if the HSV components are valid * Parameters: * h,s,v - the components of an HSV model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool Hsv_IsValid(double h, double s, double v); /* * Description: * Checks if the YIQ components are valid * Parameters: * y,i,q - the components of an YIQ model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool Yiq_IsValid(double y, double i, double q); /* * Description: * Checks if the YUV components are valid * Parameters: * y,u,v - the components of an YUV model expressed * as real numbers * Returns: * true if the values are correct * false if the values are incorrect */ bool Yuv_IsValid(double y, double u, double v);

If you want to view the implementation of these functions, see the links below:

## No comments:

## Post a Comment

Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!