Color
C++ library thats implemets class color. Available models: RGB, HSL, HSV, CMY, CMYK, YIQ, YUV and growing.
Install / Use
/learn @dmilos/ColorREADME
Yet another c++ library that implements color.
Description
- Yet another c++ library that implements color conversion and manipulation.
Key features:
- No virtual functions
- Minimal memory footprint
- Ability to copy array/vector of colors with memcpy, memmove and initialize with memset.
- Conversions from/to different models ( and its formats ).
- Headers only
- One file to include to start the fun
- By using del or rm it is reducible in to only two of them.
- No third parties
- No additional binaries
- Out of the box ready
- No need to recompile or start some install process.
- Color models:
- GRAY,
- RGB, CMY, CMYK,
- HSI, HSL, HSV, HWB, TSL
- YIQ, YUV(BT.601, BT.709), YCgCo, YPbPr(BT.601, BT.709, BT.2020),
- XYZ( sRGB, D65, 2° ), LAB( CIE, Hunter), LUV, LMS( von Kries D65, von Kries E, BFD, MCAT02 ), xyY, LabCH, LuvCH
Code sample - Initialization:
// Initialize with constant.
color::bgr<std::uint8_t> b( ::color::constant::aqua_t{} );
//!< Use x11 green.
color::yiq<std::uint8_t> y( ::color::constant::x11::green_t{} );
// Use intuitive/natural values for initialization.
// hue goes from 0 to 360, saturation and value from 0 to 100.
color::hsv<double> h( { 120.0, 50.0, 60.0 } );
// Lightens will goes from 0 to 100. a and b from -127 to 127.
color::lab<float> l( { 50.0, -10, 90 } );
// Well known rgb. Values are between 0 and 1.
color::rgb<float> r( { 0.5, 0, 0.9 } );
Code sample - Conversion:
// any model/format to any model/format by use of operator=
b = r; //!< Reformat and convert.
r = b; //!< Reformat and convert in opposite direction.
h = b; //!< Reformat and convert from bgr<std::uint8_t> to hsv<double>
h = y; //!< Reformat and convert from yiq<std::uint8_t> to hsv<double>
l = y; //!< Reformat and convert from yiq<std::uint8_t> to lab<float>
Code sample - Feature Extraction:
color::rgb<std::uint8_t> r = ::color::constant::aqua_t{};
::color::get::red( r ); //!< Extract red
color::yiq<std::uint8_t> y = ::color::constant::orange_t{};
::color::get::red( y ); //!< Extract red
Code sample - Distance:
using namespace std;
using namespace color;
using namespace color::operation;
using namespace color::constant;
using namespace color::constant::distance;
rgb<uint8_t> r0 = aqua_t{};
rgb<uint8_t> r1 = turquoise_t{};
yiq<uint8_t> y = orange_t{};
cout << distance< euclid_entity >( r0, r1 ) << endl;
cout << distance< CIE76_entity >( r0, y ) << endl;
cout << distance< CIE94_graphics_entity >( r0, y ) << endl;
cout << distance< CIE94_textile_entity >( r0, y ) << endl;
cout << distance< CIEDE2000_entity >( r0, y ) << endl;
cout << distance< CMC1984_entity >( r0, y, 1, 2 ) << endl;
cout << distance< delta_gray_entity >( r0, r1 ) << endl;
Code sample - Blending:
color::yiq<std::uint8_t> y1 = ::color::constant::turquoise_t{};
color::yiq<std::uint8_t> y2 = ::color::constant::orange_t{};
color::yiq<std::uint8_t> yr;
::color::operation::blend( y1, 0.1, y2 ); //!< Blend two colors for given alpha. Accumulation style.
yr = color::operation::mix( y2, 0.5, y2 ); //!< Blend two colors for given alpha. return style.
Install:
- Clone this Repository:
Examples:- Windows : git clone https://github.com/dmilos/color.git c:\my-work-folder\my-git-folder\color
- Linux : git clone https://github.com/dmilos/color.git /home/my-user-name/my-work-folder/my-git-folder/color
- Inform compiler where to find headers:
Examples:- MSVC : /Ic:\my-work-folder\my-git-folder\color\src
- gcc : -I/home/my-user-name/my-work-folder/my-git-folder/color/src
Want to see more:
Tested against:
- GCC 13.4.0, C++11,14,17,20
- MSVC 2022 17.14.9 C++11,14,17,20
- MSVC 2022 17.14.9 CLang, C++11,14,17,20
(Links
- ibireme
- YUV, YCbCr, YPbPr color spaces
- Bruce Justin Lindbloom
- colorizer
- Parameter values for ultra-high definition television systems for production and international programme exchange
License
Licensed under an Apache-2.0 license.
Related Skills
node-connect
334.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
334.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.3kCommit, push, and open a PR
