mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
color: add hex2color, color2hex, str2rgb, rgb2str
This commit is contained in:
parent
c82dda9b74
commit
e0311c85cf
@ -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);
|
||||
}
|
||||
|
@ -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…
Reference in New Issue
Block a user