Browse Source

color: add hex2color, color2hex, str2rgb, rgb2str

pr/gpio
Cenk Gündoğan 7 years ago
parent
commit
e0311c85cf
  1. 50
      sys/color/color.c
  2. 44
      sys/include/color.h

50
sys/color/color.c

@ -1,5 +1,5 @@
/*
* Copyright (C) 2014 Freie Universität Berlin
* Copyright (C) 2014 - 2016 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for more
@ -14,12 +14,15 @@
* @brief Implementation of color module
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Cenk Gündoğan <mail@cgundogan.de>
*
* @}
*/
#include "color.h"
#define ENABLE_DEBUG (0)
#include "debug.h"
void color_rgb2hsv(color_rgb_t *rgb, color_hsv_t *hsv)
{
@ -127,3 +130,48 @@ void color_hsv2rgb(color_hsv_t *hsv, color_rgb_t *rgb)
break;
}
}
void color_hex2rgb(const uint32_t hex, color_rgb_t *rgb)
{
rgb->r = ((hex >> 16UL) & 0xFF);
rgb->g = ((hex >> 8UL) & 0xFF);
rgb->b = (hex & 0xFF);
}
void color_rgb2hex(const color_rgb_t *rgb, uint32_t *hex)
{
*hex = (((uint32_t) rgb->r) << 16UL) | (rgb->g << 8UL) | (rgb->b);
}
void color_str2rgb(const char* str, color_rgb_t *rgb)
{
rgb->r = (((str[0] > '9') ? (str[0] &~ 0x20) - 'A' + 10 : (str[0] - '0')) << 4) | /* R */
(((str[1] > '9') ? (str[1] &~ 0x20) - 'A' + 10 : (str[1] - '0')) << 0) ; /* R */
rgb->g = (((str[2] > '9') ? (str[2] &~ 0x20) - 'A' + 10 : (str[2] - '0')) << 4) | /* G */
(((str[3] > '9') ? (str[3] &~ 0x20) - 'A' + 10 : (str[3] - '0')) << 0) ; /* G */
rgb->b = (((str[4] > '9') ? (str[4] &~ 0x20) - 'A' + 10 : (str[4] - '0')) << 4) | /* B */
(((str[5] > '9') ? (str[5] &~ 0x20) - 'A' + 10 : (str[5] - '0')) << 0) ; /* B */
}
void color_rgb2str(const color_rgb_t *rgb, char* str)
{
uint8_t tmp;
/* RR */
tmp = rgb->r >> 4;
str[0] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
tmp = rgb->r & 0x0F;
str[1] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
/* GG */
tmp = rgb->g >> 4;
str[2] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
tmp = rgb->g & 0x0F;
str[3] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
/* BB */
tmp = rgb->b >> 4;
str[4] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
tmp = rgb->b & 0x0F;
str[5] = (tmp > 9) ? ('A' - 10 + tmp) : ('0' + tmp);
}

44
sys/include/color.h

@ -1,5 +1,5 @@
/*
* Copyright (C) 2014 Freie Universität Berlin
* Copyright (C) 2014 - 2016 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for more
@ -16,6 +16,7 @@
* @brief Headers for the color handling module
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Cenk Gündoğan <mail@cgundogan.de>
*/
#ifndef __COLOR_H
@ -62,6 +63,47 @@ void color_rgb2hsv(color_rgb_t *rgb, color_hsv_t *hsv);
*/
void color_hsv2rgb(color_hsv_t *hsv, color_rgb_t *rgb);
/**
* @brief Convert a @p hex value of the form 0x00RRGGBB to an RGB color struct
*
* @note the two most significant bytes of @p hex will be ignored
*
* @param[in] hex Input color encoded in hex
* @param[out] rgb Output color encoded in RGB space
*/
void color_hex2rgb(const uint32_t hex, color_rgb_t *rgb);
/**
* @brief Convert a @p rgb struct to a @p hex value of the form 0x00RRGGBB
*
* @note the two most significant bytes of @p hex will be 0
*
* @param[in] rgb Input color encoded in RGB space
* @param[out] hex Output color encoded in hex
*/
void color_rgb2hex(const color_rgb_t *rgb, uint32_t *hex);
/**
* @brief Convert a hex color string of the form 'RRGGBB' to a color_rgb_t struct
*
* @note @p str MUST contain only hexadecimal digits.
* Expect unexpected behaviour, otherwise.
*
* @param[in] str Input color encoded as string of the form 'RRGGBB'
* @param[out] rgb Output color encoded in RGB space
*/
void color_str2rgb(const char *str, color_rgb_t *color);
/**
* @brief Convert a color_rgb_t struct to a hex color string of the form 'RRGGBB'
*
* @note @p str MUST be big enough to hold 6 characters
*
* @param[in] rgb Input color encoded in RGB space
* @param[out] str Output color encoded as string of the form 'RRGGBB'
*/
void color_rgb2str(const color_rgb_t *rgb, char *str);
#ifdef __cplusplus
}
#endif

Loading…
Cancel
Save