62{
63 float flush_volume;
65 return flush_volume;
66 float src_r_f, src_g_f, src_b_f, dst_r_f, dst_g_f, dst_b_f;
67 float from_hsv_h, from_hsv_s, from_hsv_v;
68 float to_hsv_h, to_hsv_s, to_hsv_v;
69
70 src_r_f = (float)src_r / 255.f;
71 src_g_f = (float)src_g / 255.f;
72 src_b_f = (float)src_b / 255.f;
73 dst_r_f = (float)dst_r / 255.f;
74 dst_g_f = (float)dst_g / 255.f;
75 dst_b_f = (float)dst_b / 255.f;
76
77
78 RGB2HSV(src_r_f, src_g_f, src_b_f, &from_hsv_h, &from_hsv_s, &from_hsv_v);
79 RGB2HSV(dst_r_f, dst_g_f, dst_b_f, &to_hsv_h, &to_hsv_s, &to_hsv_v);
80 float hs_dist =
DeltaHS_BBS(from_hsv_h, from_hsv_s, from_hsv_v, to_hsv_h, to_hsv_s, to_hsv_v);
81
82
83
86 float lumi_flush = 0.f;
87 if (to_lumi >= from_lumi) {
88 lumi_flush = std::pow(to_lumi - from_lumi, 0.7f) * 560.f;
89 }
90 else {
91 lumi_flush = (from_lumi - to_lumi) * 80.f;
92
93 float inter_hsv_v = 0.67 * to_hsv_v + 0.33 * from_hsv_v;
94 hs_dist = std::min(inter_hsv_v, hs_dist);
95 }
96 float hs_flush = 230.f * hs_dist;
97
99 flush_volume = std::max(flush_volume, 60.f);
100
101 return flush_volume;
102}
void RGB2HSV(float r, float g, float b, float *h, float *s, float *v)
Definition ColorSpaceConvert.cpp:119
static float DeltaHS_BBS(float h1, float s1, float v1, float h2, float s2, float v2)
Definition FlushVolCalc.cpp:34
static float calc_triangle_3rd_edge(float edge_a, float edge_b, float degree_ab)
Definition FlushVolCalc.cpp:29