| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include <stdint.h>
- #include <cmath>
- #include <iostream>
- #include <string>
- #include "color.hpp"
- namespace cx_light {
- color::color() {
- this->red = 0;
- this->green = 0;
- this->blue = 0;
- }
- color::~color() {}
- color color::from_hex(long hex) {
- color target;
- target.red = ((hex & 0xFF0000) >> 16);
- target.green = ((hex & 0x00FF00) >> 8);
- target.blue = ((hex & 0x0000FF) >> 0);
- return target;
- }
- color color::from_rgb(uint8_t red, uint8_t green, uint8_t blue) {
- color target;
-
- target.red = red;
- target.green = green;
- target.blue = blue;
- return target;
- }
- color color::from_white(long temperature) {
- color target;
- temperature = temperature / 100;
- if (temperature <= 66) {
- target.red = 255;
- target.blue = 0;
- float green = 99.4708025861 * log(temperature) - 161.1195681661;
-
- green = green > 255 ? 255 : green;
- green = green < 0 ? 0 : green;
- target.green = green;
- if (temperature > 19) {
- float blue = temperature - 10;
- blue = 138.5177312231 * log(blue) - 305.0447927307;
-
- blue = blue > 255 ? 255 : blue;
- blue = blue < 0 ? 0 : blue;
- target.blue = blue;
- }
-
- return target;
- }
- float red = 329.698727446 * pow(temperature - 60, -0.1332047592);
- red = red > 255 ? 255 : red;
- red = red < 0 ? 0 : red;
- target.red = red;
- float green = 288.1221695283 * pow(temperature - 60, -0.0755148492 );
- green = green > 255 ? 255 : green;
- green = green < 0 ? 0 : green;
- target.green = green;
- target.blue = 255;
- return target;
- }
- void color::set_source(const Cairo::RefPtr<Cairo::Context> &context) {
- context->set_source_rgb(
- this->get_normalized_red(),
- this->get_normalized_green(),
- this->get_normalized_blue()
- );
- }
- uint8_t color::get_red() {
- return this->red;
- }
- uint8_t color::get_green() {
- return this->green;
- }
- uint8_t color::get_blue() {
- return this->blue;
- }
- double color::get_normalized_red() {
- return ((double) this->red / 255);
- }
- double color::get_normalized_green() {
- return ((double) this->green / 255);
- }
- double color::get_normalized_blue() {
- return ((double) this->blue / 255);
- }
- }
|