Renk Aralığı bul

2 Cevap php

Ben bir RGB değeri değerinden bir renk aralığını bulmak istiyorum

Ben örneğin rgb (0100200) verildi eğer bana rgb arasındaki her şeyi (0,0,255) ve RGB (0255255) verecek. Ancak (255,0,255) rgb değil.

Benzer şekilde RGB (150,50,0). Dönüş: rgb (255,0,0) ve RGB (255,255,0). Değil rgb (255,0,255).

Mantıklı?

PHP kullanarak Im

2 Cevap

Açıklamak algoritma temelde: "Bir renk iki RGB bileşenden oluşur güçlü RGB bileşeni S olalım ve diğer bileşen O. Eğer S (255) olsun ve O 0-255 arasında değişmektedir 255 varyasyonları oluşturun.."

Örneğin Aşağıdaki örnek aynı sonucu verim:

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)

Bu, sadece 6 varyasyonları var demektir.

  1. Kırmızı büyük bileşeni, Yeşil sonraki en büyük => rgb olan (255, [0-255], 0)
  2. Kırmızı büyük Mavi sonraki en büyük => rgb bileşeni, (255,0, [0-255]) 'dir
  3. Yeşil büyük bileşeni, Kırmızı sonraki en büyük => rgb ([0-255], 255,0) olduğu
  4. Yeşil büyük bileşeni, Mavi sonraki en büyük => rgb ([0-255], 0255) olduğu
  5. Mavi Kırmızı sonraki en büyük => rgb büyük bileşeni, ([0-255], 0255) olduğu
  6. Mavi yeşil sonraki en => RGB en büyük bileşen, (0, [0-255], 255)

Lütfen algoritmanın niyeti belli değil, ben senin kullanım durumda size açıklamak ne aslında farklı olduğunu tahmin ediyorum. Bu 1 veya 3 ya da bileşenlerinin (aslında çoğu renk) ile renkleri işlemez.

Amacınız (belli bir mesafe örneğin renk) benzer renkleri bulmak için ise daha iyi bir yaklaşım vardır. Örneğin bir HSV renk uzayında (Hue, Saturation, Value) için renkleri dönüştürmek ve daha sonra da bileşenleri H, S veya V + / eğer renk benzer olduğunu söyleyebiliriz - Orijinalinizden 10 adım.

Örneğin:

rgb (255,100,0) => HSV (24100100)

Sizin aralık sonra HSV olduğunu ([14-34], [90-110], [90-110])

Hm, eminim bu doğru anlamak değil, ama sayılardan biri diğer ikisinden daha yüksektir, ve değerlerden biri her zaman sıfır olduğunu söylüyor düşünüyorum. Bu durumda ise, benzer basit bir if-else deyimi kullanmak gerekir

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) {
   .
   .
   .
}

Bu sorun size yardımcı olacağını umuyoruz.