Add color manipulation utilities
This commit is contained in:
151
include/BH/Color.h
Normal file
151
include/BH/Color.h
Normal file
@@ -0,0 +1,151 @@
|
||||
#ifndef BH_COLOR_H
|
||||
#define BH_COLOR_H
|
||||
|
||||
|
||||
#include "Common.h"
|
||||
|
||||
|
||||
#define BH_COLOR_TYPE_RGBA 0x0000
|
||||
#define BH_COLOR_TYPE_HSVA 0x0001
|
||||
#define BH_COLOR_TYPE_HSLA 0x0002
|
||||
|
||||
|
||||
#define BH_COLOR_MODE_NORMAL 0x0000
|
||||
#define BH_COLOR_MODE_MULTIPLY 0x0001
|
||||
#define BH_COLOR_MODE_SCREEN 0x0002
|
||||
#define BH_COLOR_MODE_OVERLAY 0x0003
|
||||
#define BH_COLOR_MODE_DARKEN 0x0004
|
||||
#define BH_COLOR_MODE_LIGHTEN 0x0005
|
||||
#define BH_COLOR_MODE_COLOR_DODGE 0x0006
|
||||
#define BH_COLOR_MODE_COLOR_BURN 0x0007
|
||||
#define BH_COLOR_MODE_LINEAR_DODGE 0x0008
|
||||
#define BH_COLOR_MODE_LINEAR_BURN 0x0009
|
||||
#define BH_COLOR_MODE_HARD_LIGHT 0x000A
|
||||
#define BH_COLOR_MODE_SOFT_LIGHT 0x000B
|
||||
#define BH_COLOR_MODE_DIFFERENCE 0x000C
|
||||
#define BH_COLOR_MODE_EXCLUSION 0x000D
|
||||
#define BH_COLOR_MODE_HUE 0x000E
|
||||
#define BH_COLOR_MODE_SATURATION 0x000F
|
||||
#define BH_COLOR_MODE_COLOR 0x0010
|
||||
#define BH_COLOR_MODE_LUMINOSITY 0x0011
|
||||
|
||||
|
||||
typedef struct BH_Color
|
||||
{
|
||||
int type;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint16_t r;
|
||||
uint16_t g;
|
||||
uint16_t b;
|
||||
uint16_t a;
|
||||
} rgba;
|
||||
struct
|
||||
{
|
||||
uint16_t h;
|
||||
uint16_t s;
|
||||
uint16_t v;
|
||||
uint16_t a;
|
||||
} hsva;
|
||||
struct
|
||||
{
|
||||
uint16_t h;
|
||||
uint16_t s;
|
||||
uint16_t l;
|
||||
uint16_t a;
|
||||
} hsla;
|
||||
} data;
|
||||
} BH_Color;
|
||||
|
||||
|
||||
void BH_ColorRGBA8(const BH_Color *color,
|
||||
uint8_t *r,
|
||||
uint8_t *g,
|
||||
uint8_t *b,
|
||||
uint8_t *a);
|
||||
|
||||
|
||||
void BH_ColorRGBA16(const BH_Color *color,
|
||||
uint16_t *r,
|
||||
uint16_t *g,
|
||||
uint16_t *b,
|
||||
uint16_t *a);
|
||||
|
||||
|
||||
void BH_ColorRGBAf(const BH_Color *color,
|
||||
float *r,
|
||||
float *g,
|
||||
float *b,
|
||||
float *a);
|
||||
|
||||
|
||||
void BH_ColorSetRGBA8(BH_Color *color,
|
||||
uint8_t r,
|
||||
uint8_t g,
|
||||
uint8_t b,
|
||||
uint8_t a);
|
||||
|
||||
|
||||
void BH_ColorSetRGBA16(BH_Color *color,
|
||||
uint16_t r,
|
||||
uint16_t g,
|
||||
uint16_t b,
|
||||
uint16_t a);
|
||||
|
||||
|
||||
void BH_ColorSetRGBAf(BH_Color *color,
|
||||
float r,
|
||||
float g,
|
||||
float b,
|
||||
float a);
|
||||
|
||||
|
||||
void BH_ColorHSVAf(const BH_Color *color,
|
||||
float *h,
|
||||
float *s,
|
||||
float *v,
|
||||
float *a);
|
||||
|
||||
|
||||
void BH_ColorSetHSVAf(BH_Color *color,
|
||||
float h,
|
||||
float s,
|
||||
float v,
|
||||
float a);
|
||||
|
||||
|
||||
void BH_ColorHSLAf(const BH_Color *color,
|
||||
float *h,
|
||||
float *s,
|
||||
float *l,
|
||||
float *a);
|
||||
|
||||
|
||||
void BH_ColorSetHSLAf(BH_Color *color,
|
||||
float h,
|
||||
float s,
|
||||
float l,
|
||||
float a);
|
||||
|
||||
|
||||
void BH_ColorToRGBA(const BH_Color *color,
|
||||
BH_Color *out);
|
||||
|
||||
|
||||
void BH_ColorToHSVA(const BH_Color *color,
|
||||
BH_Color *out);
|
||||
|
||||
|
||||
void BH_ColorToHSLA(const BH_Color *color,
|
||||
BH_Color *out);
|
||||
|
||||
|
||||
void BH_ColorBlend(const BH_Color *foreground,
|
||||
const BH_Color *background,
|
||||
int mode,
|
||||
BH_Color *dest);
|
||||
|
||||
|
||||
#endif /* BH_COLOR_H */
|
||||
Reference in New Issue
Block a user