रंग मॉडल
| मॉडल | घटक | सीमा | विवरण |
| RGB | लाल, हरा, नीला | 0-255 | योज्य मॉडल, डिस्प्ले के लिए |
| HSV | ह्यू, संतृप्ति, मूल्य | H: 0-360°, S: 0-100%, V: 0-100% | मानव दृष्टि के अनुरूप, कलाकारों द्वारा पसंदीदा |
रूपांतरण एल्गोरिदम
- RGB मानों को 0-1 रेंज में सामान्य करें:
r' = r/255, g' = g/255, b' = b/255
- न्यूनतम/अधिकतम खोजें:
cmax = max(r',g',b'), cmin = min(r',g',b')
diff = cmax - cmin की गणना करें
- ह्यू (H):
- यदि cmax = cmin: H = 0
- यदि cmax = r': H = (60° × ((g'-b')/diff) + 360°) % 360°
- यदि cmax = g': H = (60° × ((b'-r')/diff) + 120°) % 360°
- यदि cmax = b': H = (60° × ((r'-g')/diff) + 240°) % 360°
- संतृप्ति (S):
- यदि cmax = 0: S = 0
- अन्यथा: S = (diff/cmax) × 100%
- मूल्य (V): V = cmax × 100%
C प्रोग्राम
#include <stdio.h>
#include <math.h>
float max3(float a, float b, float c) {
return fmaxf(a, fmaxf(b, c));
}
float min3(float a, float b, float c) {
return fminf(a, fminf(b, c));
}
void rgb_to_hsv(float r, float g, float b) {
// 0-1 रेंज में सामान्य करें
r /= 255.0f; g /= 255.0f; b /= 255.0f;
float cmax = max3(r, g, b);
float cmin = min3(r, g, b);
float diff = cmax - cmin;
float h = 0, s = 0, v = 0;
// ह्यू गणना
if (diff == 0) {
h = 0;
} else if (cmax == r) {
h = fmodf((60.0f * ((g - b) / diff) + 360.0f), 360.0f);
} else if (cmax == g) {
h = fmodf((60.0f * ((b - r) / diff) + 120.0f), 360.0f);
} else if (cmax == b) {
h = fmodf((60.0f * ((r - g) / diff) + 240.0f), 360.0f);
}
// संतृप्ति गणना
if (cmax == 0) s = 0;
else s = (diff / cmax) * 100.0f;
// मूल्य गणना
v = cmax * 100.0f;
printf("HSV: H=%.2f°, S=%.2f%%, V=%.2f%%\n", h, s, v);
}
int main() {
int r, g, b;
printf("RGB मान दर्ज करें (0-255): ");
scanf("%d %d %d", &r, &g, &b);
if (r < 0 || r > 255 || g < 0 || g > 255 || b < 0 || b > 255) {
printf("मान 0-255 के बीच होने चाहिए\n");
return 1;
}
rgb_to_hsv(r, g, b);
return 0;
}
नमूना आउटपुट
RGB मान दर्ज करें (0-255): 31 52 29
HSV: H=114.78°, S=44.23%, V=20.39%
RGB मान दर्ज करें (0-255): 129 88 47
HSV: H=30.00°, S=63.57%, V=50.59%
RGB मान दर्ज करें (0-255): 255 0 0
HSV: H=0.00°, S=100.00%, V=100.00%
RGB मान दर्ज करें (0-255): 0 255 0
HSV: H=120.00°, S=100.00%, V=100.00%
उलटा रूपांतरण (HSV से RGB)
void hsv_to_rgb(float h, float s, float v) {
s /= 100.0f; v /= 100.0f;
float c = v * s;
float x = c * (1 - fabsf(fmodf(h/60.0f, 2) - 1));
float m = v - c;
float r, g, b;
if (h < 60) { r=c; g=x; b=0; }
else if (h < 120) { r=x; g=c; b=0; }
else if (h < 180) { r=0; g=c; b=x; }
else if (h < 240) { r=0; g=x; b=c; }
else if (h < 300) { r=x; g=0; b=c; }
else { r=c; g=0; b=x; }
printf("RGB: %d, %d, %d\n",
(int)roundf((r+m)*255),
(int)roundf((g+m)*255),
(int)roundf((b+m)*255));
}