Add color blending to GDISP
This commit is contained in:
parent
2d27673f0f
commit
9d2b0b667b
2 changed files with 34 additions and 0 deletions
|
@ -800,6 +800,19 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
||||||
void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color);
|
void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Blend 2 colors according to the alpha
|
||||||
|
* @return The combined color
|
||||||
|
*
|
||||||
|
* @param[in] fg The foreground color
|
||||||
|
* @param[in] bg The background color
|
||||||
|
* @param[in] alpha The alpha value (0-255). 0 is all background, 255 is all foreground.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
color_t gdispBlendColor(color_t fg, color_t bg, uint8_t alpha);
|
||||||
|
|
||||||
/* Support routine for packed pixel formats */
|
/* Support routine for packed pixel formats */
|
||||||
#if !defined(gdispPackPixels) || defined(__DOXYGEN__)
|
#if !defined(gdispPackPixels) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -990,6 +990,27 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
color_t gdispBlendColor(color_t fg, color_t bg, uint8_t alpha)
|
||||||
|
{
|
||||||
|
uint16_t fg_ratio = alpha + 1;
|
||||||
|
uint16_t bg_ratio = 256 - alpha;
|
||||||
|
uint16_t r, g, b;
|
||||||
|
|
||||||
|
r = RED_OF(fg) * fg_ratio;
|
||||||
|
g = GREEN_OF(fg) * fg_ratio;
|
||||||
|
b = BLUE_OF(fg) * fg_ratio;
|
||||||
|
|
||||||
|
r += RED_OF(bg) * bg_ratio;
|
||||||
|
g += GREEN_OF(bg) * bg_ratio;
|
||||||
|
b += BLUE_OF(bg) * bg_ratio;
|
||||||
|
|
||||||
|
r /= 256;
|
||||||
|
g /= 256;
|
||||||
|
b /= 256;
|
||||||
|
|
||||||
|
return RGB2COLOR(r, g, b);
|
||||||
|
}
|
||||||
|
|
||||||
#if (!defined(gdispPackPixels) && !defined(GDISP_PIXELFORMAT_CUSTOM))
|
#if (!defined(gdispPackPixels) && !defined(GDISP_PIXELFORMAT_CUSTOM))
|
||||||
void gdispPackPixels(pixel_t *buf, coord_t cx, coord_t x, coord_t y, color_t color) {
|
void gdispPackPixels(pixel_t *buf, coord_t cx, coord_t x, coord_t y, color_t color) {
|
||||||
/* No mutex required as we only read static data */
|
/* No mutex required as we only read static data */
|
||||||
|
|
Loading…
Add table
Reference in a new issue