_SATURATION32

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search

The _SATURATION32 function returns the saturation value (HSB colorspace) of a given 32-bit ARGB color.


Syntax

saturation# = _SATURATION32(argbColor~&)


Parameters

  • argbColor~& is the 32-bit ARGB color value to retrieve the saturation value from.


Description

  • The value returned is of type DOUBLE in the range 0 to 100 percent.
    • 100% is the richest color possible, as closer the value comes to 0% as more faded is the color, ending at dull gray.
    • The intensity of the gray (i.e. black >> darkgray >> midgray >> lightgray >> white) depends on the brightness value.
Naming differences
  • The HSB (B=Brightness) colorspace is also known as HSV (V=Value) and sometimes even called HSI (I=Intensity), but that's all just different names for the same thing.
  • However, this function is not suitable for the HSL (L=Lightness) colorspace, which is widely used in the Web/CSS.
Precision drawbacks
  • When converting between colorspaces, rounding errors can occur.
  • While the HSB colorspace has virtually infinite precision using floating point values, RGB is limited to 8-bit integers (0-255) only, which can lead to quantization errors.
  • In fact, not all colors in HSB can be accurately represented in RGB, but the opposite is possible.
  • It can be guaranteed, that the _HUE32, _SATURATION32 and _BRIGHTNESS32 values retrieved from any arbitrary RGB color will reproduce the exact same RGB color when passed back through _HSB32.


Availability


Examples

Example 1
Showcasing the HSB value retrieving functions and demonstrate the quantization errors.
PRINT "Creating a color using the HSB colorspace..."
cOrig~& = _HSB32(90, 75, 65)
PRINT "_HSB32( 90, 75, 65 ) = _RGB32("; _RED32(cOrig~&); ","; _GREEN32(cOrig~&); ","; _BLUE32(cOrig~&); ")"
PRINT
PRINT "Back to HSB values (notice the quantization errors)."
PRINT "The HSB color was not accurately representable in RGB."
PRINT "Hue.......:"; _HUE32(cOrig~&)
PRINT "Saturation:"; _SATURATION32(cOrig~&)
PRINT "Brightness:"; _BRIGHTNESS32(cOrig~&)
PRINT
cBack~& = _HSB32(_HUE32(cOrig~&), _SATURATION32(cOrig~&), _BRIGHTNESS32(cOrig~&))
PRINT "However, when using the retrieved HSB values again for conversion,"
PRINT "then we definitly get back the exact same RGB color again."
PRINT "Red.......:"; _RED32(cBack~&)
PRINT "Green.....:"; _GREEN32(cBack~&)
PRINT "Blue......:"; _BLUE32(cBack~&)
PRINT
PRINT "Conclusion:"
PRINT "Not every HSB color can be accurately represented in 8-bit integer RGB,"
PRINT "but every RGB color can be accurately represented in floating point HSB."
END


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link