Computer >> Máy Tính >  >> Lập trình >> lập trình C

C Chương trình thay đổi mô hình màu RGB thành mô hình màu HSV

Cho dải màu RGB dưới dạng số nguyên; nhiệm vụ là tìm màu HSV thích hợp của nó bằng cách chuyển đổi dải màu RGB

Mô hình màu RGB là gì

Mô hình màu RGB bao gồm ba màu Đỏ, Xanh lục và Xanh lam. Mô hình RGB là một mô hình màu được sử dụng rộng rãi trong các công nghệ hiển thị; nó là một mô hình phụ gia trong đó chúng tôi thêm ba màu này với các cường độ khác nhau để tạo ra hàng triệu màu khác nhau trên thiết bị hiển thị.

Mô hình màu HSV là gì?

Mô hình màu HSV bao gồm Hue, Saturation, Value còn được gọi là HSB (Hue, Saturation, Brightness) .HSV là đại diện thay thế của mô hình màu RGB. Nó được căn chỉnh theo cách mà thị giác của con người cảm nhận được các thuộc tính tạo màu sắc. Mô hình màu này thường được các nghệ sĩ sử dụng nhiều hơn do nó là cách phối màu tự nhiên. Ba thuộc tính của HSV có thể cộng cũng như trừ.

Chúng ta phải làm gì trong chương trình

Chúng tôi phải lấy đầu vào từ người dùng các giá trị mô hình RGB và sau đó tính toán toán học đầu ra trong mô hình màu HSV.

Ví dụ

 Đầu vào:r =31, g =52, b =29 Đầu ra:h s v =(114.782608, 44.230770, 20.392157) Đầu vào:r =129, g =88, b =47 Đầu ra:h s v =(30.000000, 63.565895, 50.588238) 

Phương pháp tiếp cận mà chúng tôi sẽ sử dụng để giải quyết vấn đề đã cho -

  • Lấy đầu vào bằng 3 màu Đỏ (r), Xanh lục (g) và Xanh lam (b).
  • Chia tất cả các giá trị màu bằng 255.
  • Bây giờ hãy tính cmax, cmin và chênh lệch.
  • Kiểm tra -
    • Nếu cmax và cmin bằng 0 thì Hue hoặc h sẽ bằng 0.
    • Nếu cmax bằng Red (r) thì Hue (h) =(60 * ((g - b) / diff) + 360)% 360.
    • Nếu cmax bằng Green (g) thì Hue (h) =(60 * ((b - r) / diff) + 120)% 360.
    • Nếu cmax bằng Blue (b) thì Hue (h) =(60 * ((r - g) / diff) + 240)% 360.
  • Để tìm độ bão hòa, chúng tôi sẽ kiểm tra -
    • Nếu cmax =0 thì (s) Saturation =0.
    • Nếu cmax không bằng 0 thì Saturation (s) =(diff / cmax) * 100
  • Tính toán giá trị -
    • Giá trị (v) =cmax * 100

Thuật toán

 StartStep 1 -> Trong hàm float max (float a, float b, float c) Return (a> b)? (a> c? a:c):(b> c? b:c) Bước 2 -> Trong hàm float min (float a, float b, float c) Return (a  Trong hàm int rgb_to_hsv (float r, float g, float b) Khai báo float h, s, v Đặt r =r / 255.0 Đặt g =g / 255.0 Đặt b =b / 255.0 Đặt cmax =max (r, g, b) Đặt cmin =min (r, g, b) Đặt diff =cmax-cmin Nếu cmax ==cmin thì Đặt 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, Đặt h =fmod ((60 * ((r - g) / diff) + 240), 360.0) End Else if If cmax ==0 then, Set s =0 End if Else Đặt s =(diff / cmax) * 100 End Else v =cmax * 100; In h, s, v Bước 4 -> int main (int argc, char const * argv []) Khai báo và khởi tạo r =45, g =215, b =0 Gọi hàm rgb_to_hsv (r, g, b) Stop  

Ví dụ

 #include  #include  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  

Đầu ra

 h s v =(107.441864, 100.000000, 84.313728)