Pergunta

Quero encontrar uma variedade de cores do valor de um valor RGB

Se recebi RGB (0,100.200), por exemplo, isso me daria tudo entre RGB (0,0,255) e RGB (0,255.255). No entanto, não RGB (255,0,255).

Da mesma forma, RGB (150,50,0). Retorno: RGB (255,0,0) e RGB (255,255,0). Não RGB (255,0,255).

Fazendo sentido?

Estou usando php

Foi útil?

Solução

O algoritmo que você explica é basicamente: "Uma cor consiste em dois componentes RGB. Deixe o componente RGB mais forte ser s e o outro componente O. Crie 255 variações onde você deixa estar (255) e o varia de 0 a 255."

Por exemplo, todo o exemplo abaixo produz o mesmo resultado:

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)

Isso significa que você tem apenas 6 variações.

  1. O vermelho é o maior componente, verde próximo => rgb (255, [0-255], 0)
  2. O vermelho é o maior componente, azul próximo => rgb (255,0, [0-255])
  3. Verde é o maior componente, vermelho próximo => rgb ([0-255], 255,0)
  4. Verde é o maior componente, azul próximo => rgb ([0-255], 0,255)
  5. O azul é o maior componente, vermelho próximo => rgb ([0-255], 0,255)
  6. O azul é o maior componente, verde próximo => rgb (0, [0-255], 255)

A intenção do seu algoritmo não é clara, então acho que seu caso de uso é realmente diferente do que você explica. Ele não lida com cores com 1 ou 3 componentes (na maioria das cores).

Se o seu objetivo é encontrar cores semelhantes (por exemplo, uma cor a uma certa distância), há melhores abordagens. Por exemplo, você pode converter suas cores em um espaço de cores HSV (matiz, saturação, valor) e depois dizer que a cor é semelhante se os componentes H, S ou V forem +/- 10 etapas do seu original.

Por exemplo:

RGB (255,100,0) => HSV (24.100.100)

Seu intervalo é então HSV ([14-34], [90-110], [90-110])

Outras dicas

HM, não tenho certeza se entendi corretamente, mas acho que você está dizendo que um dos números é maior que os outros dois, e um dos valores é sempre zero. Se for esse o caso, você poderá usar uma declaração simples de if-else semelhante a

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

Espero que isso ajude você com seu problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top