Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C เปลี่ยนโมเดลสี RGB เป็นโมเดลสี HSV


กำหนดช่วงสี RGB ในรูปแบบของจำนวนเต็ม งานคือการค้นหาสี HSV ที่เหมาะสมโดยการแปลงช่วงสี RGB

โมเดลสี RGB คืออะไร

รุ่นสี RGB ประกอบด้วยสามสี แดง เขียว และน้ำเงิน โมเดล RGB เป็นโมเดลสีที่ใช้กันอย่างแพร่หลายในเทคโนโลยีการแสดงผล เป็นรุ่นเสริมที่เราเพิ่มสามสีนี้ด้วยความเข้มต่างกันเพื่อสร้างสีต่างๆ นับล้านบนอุปกรณ์แสดงผล

รุ่นสี HSV คืออะไร

โมเดลสี HSV ประกอบด้วย Hue, Saturation, Value หรือที่เรียกว่า HSB (Hue, Saturation, Brightness) HSV คือการแสดงทางเลือกของรูปแบบสี RGB มีการจัดแนวในลักษณะที่การมองเห็นของมนุษย์รับรู้ถึงคุณลักษณะการสร้างสี โมเดลสีนี้มักถูกใช้โดยศิลปินเนื่องจากเป็นโทนสีธรรมชาติ คุณลักษณะทั้งสามของ HSV สามารถบวกและลบได้

สิ่งที่เราต้องทำในโปรแกรม

เราต้องใช้อินพุตจากผู้ใช้ค่าโมเดล RGB จากนั้นจึงคำนวณผลลัพธ์ในแบบจำลองสี HSV ทางคณิตศาสตร์

ตัวอย่าง

อินพุต:r =31, g =52, b =29Output:h s v =(114.782608, 44.230770, 20.392157) อินพุต:r =129, g =88, b =47Output:h s v=(30.000000, 63.565895, 50.588238)

วิธีการที่เราจะใช้ในการแก้ปัญหาที่กำหนด -

  • รับอินพุต 3 สี สีแดง(r), สีเขียว(g) และ สีน้ำเงิน(b)
  • หารค่าสีทั้งหมดด้วย 255
  • ตอนนี้คำนวณ cmax, cmin และส่วนต่าง
  • ตรวจสอบ −
    • ถ้า cmax และ cmin เท่ากับ 0 แล้ว Hue หรือ h จะเป็น 0
    • ถ้า cmax เท่ากับ Red(r) แล้ว Hue(h) =(60 * ((g – b) / diff) + 360) % 360
    • ถ้า cmax เท่ากับ Green(g) แล้ว Hue(h) =(60 * ((b – r) / diff) + 120) % 360
    • ถ้า cmax เท่ากับ Blue(b) แล้ว Hue(h) =(60 * ((r – g) / diff) + 240) % 360
  • เพื่อค้นหาความอิ่มตัว เราจะตรวจสอบ −
    • ถ้า cmax =0 แล้ว Saturation (s) =0
    • ถ้า cmax ไม่เท่ากับศูนย์ ความอิ่มตัว (s) =(diff/cmax)*100
  • การคำนวณค่า −
    • ค่า (v) =cmax *100

อัลกอริทึม

StartStep 1 -> ในฟังก์ชัน float max(float a, float b, float c) Return (a> b)? (a> c ? a :c) :(b> c ? b :c) ขั้นตอนที่ 2 -> ในฟังก์ชัน float min(float a, float b, float c) Return (a  ในฟังก์ชัน int rgb_to_hsv(float r, float g, float b) ประกาศ 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 ถ้า cmax ==cmin แล้ว ให้ตั้งค่า h =0 สิ้นสุด if Else if cmax ==r ดังนั้น Set h =fmod((60 * ((g - b) / diff) + 360), 360.0) End Else if Else if cmax ==g แล้ว ตั้งค่า h =fmod( (60 * ((b - r) / diff) + 120), 360.0) End Else if Else if cmax ==b แล้วตั้งค่า h =fmod((60 * ((r - g) / diff) + 240), 360.0) End Else if if cmax ==0 ดังนั้น Set s =0 End if Else Set s =(diff / cmax) * 100 End Else v =cmax * 100; พิมพ์ h, s, v ขั้นตอนที่ 4 -> int main(int argc, char const *argv[]) ประกาศและเริ่มต้น r =45, g =215, b =0 Call function rgb_to_hsv(r, g, b)Stop 

ตัวอย่าง

#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  

ผลลัพธ์

h s v=(107.441864, 100.000000, 84.313728)