English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
주어진 RGB 색상 범위(정수 형식); RGB 색상 범위를 변환하여 적절한 HSV 색상을 찾는 작업입니다.
RGB 색상 모델은 빨강,緑 및 파랑 세 가지 색상으로 구성되어 있습니다. RGB 모델은 화면 기술에서 널리 사용되는 색상 모델입니다. 이는 우리가 이 세 가지 다른 강도의 색상을 더하여, 디스플레이 장치에서 수백만 가지 다른 색상을 생성하는 누적 모델입니다.
HSV 색상 모델은 톤, 채도, 값이 포함되어 있으며, HSB(톤, 채도, 밝기)라고도 합니다. HSV는 RGB 색상 모델의 대체 표현입니다. 이는 인간의 시각적 색상 인식을 고려하여 조정되었습니다. 자연스러운配色 계획으로 인해, 이 색상 모델은 예술가들에게 자주 사용됩니다. HSV의 세 가지 속성은 추가되거나 감소될 수 있습니다.
우리는 RGB 모델 값의 사용자로부터 입력을 받아서, 수학적으로 HSV 색상 모델의 출력을 계산해야 합니다.
입력: r = 31, g = 52, b = 29 출력: h s v = (114.782608, 44.230770, 20.392157) 입력: r = 129, g = 88, b = 47 출력: h s v=(30.000000, 63.565895, 50.588238)
해결하기 위해 사용할 방법-
빨강(r),緑(g) 및 파랑(b) 세 가지 색상으로 입력됩니다.
모든 색상 값을 나눕니다255。
지금 cmax, cmin 및 차를 계산합니다.
확인-
만약 cmax와 cmin이 모두 0이라면, 톤 또는 h은 0이 될 것입니다.
만약 cmax가 Red(r)와 같다면, 톤(h)=(60 *((g – b)/ diff)+ 360)%360.
만약 cmax가 Green(g)와 같다면, 톤(h)=(60 *((b – r)/ diff)+ 120)%360.
만약 cmax가 Blue(b)와 같다면, 톤(h)=(60 *((r – g)/ diff)+ 240)%360.
채도를 찾기 위해 확인하겠습니다-
만약 cmax = 0이면, 채도(s)는 0입니다.
如果cmax不等于零,则饱和度(s) =(diff / cmax)* 100
值计算-
值(v) = cmax * 100
Start Step 1 -> In function float max(float a, float b, float c) Return (a > b) ? (a > c ? a : c) : (b > c ? b : c) Step 2 -> In function float min(float a, float b, float c) Return (a < b) ? (a < c ? a : c) : (b < c ? b : c) Step 3 -> In function int rgb_to_hsv(float r, float g, float b) Declare float h, s, v Set r = r / 255.0 Set g = g / 255.0 Set b = b / 255.0 Set cmax = max(r, g, b) Set cmin = min(r, g, b) Set diff = cmax-cmin If cmax == cmin then, Set h = 0 End if Else if cmax == r then, Set h = fmod((60 * ((g - b) / diff) + 360), 360.0) End Else if Else if cmax == g then, Set h = fmod((60 * ((b - r) / diff) + 120), 360.0) End Else if Else if cmax == b then, Set h = fmod((60 * ((r - g) / diff) + 240), 360.0) End Else if If cmax == 0 then, Set s = 0 End if Else Set s = (diff / cmax) * 100 End Else v = cmax * 100; Print h, s, v Step 4 -> int main(int argc, char const *argv[]) Declare and initialize r = 45, g = 215, b = 0 Call function rgb_to_hsv(r, g, b) Stop
#include <stdio.h> #include <math.h> float max(float a, float b, float c) { return ((a > b) ? (a > c ? a : c) : (b > c ? b : c)); } float min(float a, float b, float c) { return ((a < b)? (a < c ? a : c) : (b < c ? b : c)); } int rgb_to_hsv(float r, float g, float b) { //R, G, B 값으로 나누어255- //범위를 0..2550으로 변경1: float h, s, v; r /= 255.0; g /= 255.0; b /= 255.0; float cmax = max(r, g, b); // r, g, b의 최대값 float cmin = min(r, g, b); // r, g, b의 최소값 float diff = cmax-cmin; // cmax와 cmin의 차이 if (cmax == cmin) h = 0; else if (cmax == r) h = fmod((60 * ((g - b) / diff) + 360), 360.0); else if (cmax == g) h = fmod((60 * ((b - r) / diff) + 120), 360.0); else if (cmax == b) h = fmod((60 * ((r - g) / diff) + 240), 360.0); //cmax가 0이면 if (cmax == 0) s = 0; else s = (diff / cmax) * 100; //v 계산- v = cmax * 100; printf("h s v=(%f, %f, %f)\n", h, s, v ); return 0; } //주요 기능 int main(int argc, char const *argv[]) { int r = 45, g = 215, b = 0; rgb_to_hsv(r, g, b); return 0; }
출력 결과
h s v=(107.441864, 100.000000, 84.313728)