1 #include "plugincolors.h"
16 int HSV::rgb_to_hsv(float r, float g, float b, float &h, float &s, float &v)
19 float min, max, delta;
21 min = ((r < g) ? r : g) < b ? ((r < g) ? r : g) : b;
22 max = ((r > g) ? r : g) > b ? ((r > g) ? r : g) : b;
27 if(max != 0 && delta != 0)
32 h = (g - b) / delta; // between yellow & magenta
35 h = 2 + (b - r) / delta; // between cyan & yellow
37 h = 4 + (r - g) / delta; // between magenta & cyan
45 // r = g = b = 0 // s = 0, v is undefined
53 int HSV::hsv_to_rgb(float &r, float &g, float &b, float h, float s, float v)
56 float min, max, delta;
65 h /= 60; // sector 0 to 5
67 f = h - i; // factorial part of h
70 t = v * (1 - s * (1 - f));
108 int HSV::yuv_to_hsv(int y, int u, int v, float &h, float &s, float &va, int max)
115 yuv_static.yuv_to_rgb_16(r_i, g_i, b_i, y, u, v);
119 yuv_static.yuv_to_rgb_8(r_i, g_i, b_i, y, u, v);
121 r = (float)r_i / max;
122 g = (float)g_i / max;
123 b = (float)b_i / max;
126 HSV::rgb_to_hsv(r, g, b, h2, s2, v2);
134 int HSV::hsv_to_yuv(int &y, int &u, int &v, float h, float s, float va, int max)
138 HSV::hsv_to_rgb(r, g, b, h, s, va);
142 r_i = (int)CLIP(r, 0, max);
143 g_i = (int)CLIP(g, 0, max);
144 b_i = (int)CLIP(b, 0, max);
148 yuv_static.rgb_to_yuv_16(r_i, g_i, b_i, y2, u2, v2);
150 yuv_static.rgb_to_yuv_8(r_i, g_i, b_i, y2, u2, v2);
183 for(int i = 0; i < 0x100; i++)
186 rtoy_tab_8[i] = (int)(R_TO_Y * 0x100 * i);
187 rtou_tab_8[i] = (int)(R_TO_U * 0x100 * i);
188 rtov_tab_8[i] = (int)(R_TO_V * 0x100 * i);
190 gtoy_tab_8[i] = (int)(G_TO_Y * 0x100 * i);
191 gtou_tab_8[i] = (int)(G_TO_U * 0x100 * i);
192 gtov_tab_8[i] = (int)(G_TO_V * 0x100 * i);
194 btoy_tab_8[i] = (int)(B_TO_Y * 0x100 * i);
195 btou_tab_8[i] = (int)(B_TO_U * 0x100 * i) + 0x8000;
196 btov_tab_8[i] = (int)(B_TO_V * 0x100 * i) + 0x8000;
199 vtor_8 = &(vtor_tab_8[(0x100) / 2]);
200 vtog_8 = &(vtog_tab_8[(0x100) / 2]);
201 utog_8 = &(utog_tab_8[(0x100) / 2]);
202 utob_8 = &(utob_tab_8[(0x100) / 2]);
204 for(int i = (-0x100) / 2; i < (0x100) / 2; i++)
207 vtor_8[i] = (int)(V_TO_R * 0x100 * i);
208 vtog_8[i] = (int)(V_TO_G * 0x100 * i);
210 utog_8[i] = (int)(U_TO_G * 0x100 * i);
211 utob_8[i] = (int)(U_TO_B * 0x100 * i);
214 for(int i = 0; i < 0x10000; i++)
217 rtoy_tab_16[i] = (int)(R_TO_Y * 0x100 * i);
218 rtou_tab_16[i] = (int)(R_TO_U * 0x100 * i);
219 rtov_tab_16[i] = (int)(R_TO_V * 0x100 * i);
221 gtoy_tab_16[i] = (int)(G_TO_Y * 0x100 * i);
222 gtou_tab_16[i] = (int)(G_TO_U * 0x100 * i);
223 gtov_tab_16[i] = (int)(G_TO_V * 0x100 * i);
225 btoy_tab_16[i] = (int)(B_TO_Y * 0x100 * i);
226 btou_tab_16[i] = (int)(B_TO_U * 0x100 * i) + 0x800000;
227 btov_tab_16[i] = (int)(B_TO_V * 0x100 * i) + 0x800000;
230 vtor_16 = &(vtor_tab_16[(0x10000) / 2]);
231 vtog_16 = &(vtog_tab_16[(0x10000) / 2]);
232 utog_16 = &(utog_tab_16[(0x10000) / 2]);
233 utob_16 = &(utob_tab_16[(0x10000) / 2]);
235 for(int i = (-0x10000) / 2; i < (0x10000) / 2; i++)
238 vtor_16[i] = (int)(V_TO_R * 0x100 * i);
239 vtog_16[i] = (int)(V_TO_G * 0x100 * i);
241 utog_16[i] = (int)(U_TO_G * 0x100 * i);
242 utob_16[i] = (int)(U_TO_B * 0x100 * i);