Encontre o alcance de cores
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
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.
- O vermelho é o maior componente, verde próximo => rgb (255, [0-255], 0)
- O vermelho é o maior componente, azul próximo => rgb (255,0, [0-255])
- Verde é o maior componente, vermelho próximo => rgb ([0-255], 255,0)
- Verde é o maior componente, azul próximo => rgb ([0-255], 0,255)
- O azul é o maior componente, vermelho próximo => rgb ([0-255], 0,255)
- 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.