This repository has been archived on 2026-04-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
bhlib/include/BH/Color.h

152 lines
3.5 KiB
C

#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 */