#include <iostream>
#include <math.h>
using namespace std;
// HSB hue 色相 saturation 饱和度 brightness 亮度 (有些地方用HSV代替 v代表value
// 也就是指亮度值)
// HSL hue 色相 saturation 饱和度 lightness 明度
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
struct RGB // 定义 RGB 结构体
{
float r;
float g;
float b;
};
struct HSV // 定义HSV结构体
{
float h;
float s;
float v;
};
struct HSL // 定义HSL结构体
{
float h;
float s;
float l;
};
// 调整RGB的值
void adjustRGB(RGB &rgb) {
if (rgb.r < 0) {
rgb.r = 0;
}
if (rgb.g < 0) {
rgb.g = 0;
}
if (rgb.b < 0) {
rgb.b = 0;
}
if (rgb.r > 255) {
rgb.r = 255;
}
if (rgb.g > 255) {
rgb.g = 255;
}
if (rgb.b > 255) {
rgb.b = 255;
}
}
// 调整 HSV的值
void adjustHSV(HSV &hsv) {
if (hsv.h < 0) {
hsv.h = 0;
}
if (hsv.s < 0) {
hsv.s = 0;
}
if (hsv.v < 0) {
hsv.v = 0;
}
if (hsv.h > 360) {
hsv.h = 360;
}
if (hsv.s > 100) {
hsv.s = 100;
}
if (hsv.v > 100) {
hsv.v = 100;
}
}
// 调整 HSL的值
void adjustHSL(HSL &hsl) {
if (hsl.h < 0) {
hsl.h = 0;
}
if (hsl.s < 0) {
hsl.s = 0;
}
if (hsl.l < 0) {
hsl.l = 0;
}
if (hsl.h > 360) {
hsl.h = 360;
}
if (hsl.s > 100) {
hsl.s = 100;
}
if (hsl.l > 100) {
hsl.l = 100;
}
}
// 将RGB格式转换为HSV(HSB)格式
void RGB2HSV(RGB rgb, HSV &hsv) {
float b, g, r;
float h, s, v;
float min, max; // t,g,b 中的最小和最大值
float delta;
b = rgb.b / 255.f;
g = rgb.g / 255.f;
r = rgb.r / 255.f;
max = MAX(r, g);
max = MAX(max, b);
min = MIN(r, g);
min = MIN(min, b);
v = max;
delta = max - min;
if (max == 0.0f) {
s = 0.0f;
} else {