سؤال

أريد أن أجد مجموعة من الألوان من قيمة قيمة RGB واحدة

إذا تم إعطائي RGB (0،100،200) على سبيل المثال ، فسوف يعطيني كل شيء بين RGB (0،0،255) و RGB (0،255،255). ومع ذلك ليس RGB (255،0،255).

بالمثل RGB (150،50،0). العودة: RGB (255،0،0) و RGB (255،255،0). ليس RGB (255،0،255).

منطقي؟

أنا أستخدم PHP

هل كانت مفيدة؟

المحلول

الخوارزمية التي تشرحها هي بشكل أساسي: "يتكون اللون من مكونين من RGB. دع مكون RGB الأقوى هو S والمكون الآخر O. إنشاء 255 اختلافات حيث تدع S (255) و O تتراوح من 0 إلى 255."

على سبيل المثال كل المثال أدناه ، يعطي نفس النتيجة:

a) rgb(0,100,200) 
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)

Result: rgb(0,[0-255],255)

هذا يعني أن لديك فقط 6 اختلافات.

  1. الأحمر هو أكبر مكون ، الأخضر التالي الأكبر => RGB (255 ، [0-255] ، 0)
  2. الأحمر هو أكبر مكون ، الأزرق التالي الأكبر => RGB (255،0 ، [0-255])
  3. Green هو أكبر مكون ، باللون الأحمر التالي الأكبر => RGB ([0-255] ، 255،0)
  4. الأخضر هو أكبر مكون ، الأزرق التالي الأكبر => RGB ([0-255] ، 0،255)
  5. الأزرق هو أكبر مكون ، أحمر التالي الأكبر => RGB ([0-255] ، 0،255)
  6. Blue هو أكبر مكون ، الأخضر التالي الأكبر => RGB (0 ، [0-255] ، 255)

إن نية الخوارزمية الخاصة بك ليست واضحة ، لذلك أعتقد أن حالة الاستخدام الخاصة بك تختلف في الواقع عما تشرحه. لا يتعامل مع الألوان مع مكونات واحدة أو 3 (معظم الألوان في الواقع).

إذا كان هدفك هو العثور على ألوان مماثلة (مثل اللون في مسافة معينة) ، فهناك طرق أفضل. على سبيل المثال ، يمكنك تحويل الألوان الخاصة بك إلى مساحة ألوان HSV (Hue ، التشبع ، القيمة) ، ثم قل أن اللون متشابه إذا كان أي من المكونات H أو S أو V هي +/- 10 خطوات من الأصل.

على سبيل المثال:

RGB (255،100،0) => HSV (24،100،100)

ثم هو HSV ([14-34] ، [90-110] ، [90-110])

نصائح أخرى

HM ، لست متأكدًا من أنني أفهم ذلك بشكل صحيح ، لكنني أعتقد أنك تقول أن أحد الأرقام أعلى من الاثنين الآخرين ، وواحدة من القيم دائمًا صفر. إذا كان هذا هو الحال ، فيجب أن تكون قادرًا على استخدام عبارة بسيطة if-else مشابهة لـ

if (r > g && r > b) {
  if (g > 0) {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 255, 0);
  }
  else {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 0, 255);
  }
}
else if (r < g && g > b) {
   .
   .
   .
}

آمل أن يساعدك ذلك في مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top