Esse desafio é mudar gradualmente os tons de uma imagem para criar imagens bonitas como esta:
( original )
Desafio
Escreva um programa ou função que inclua dois números inteiros não negativos e uma imagem em qualquer formato de arquivo de imagem comum de sua escolha (você pode seguir um caminho para a imagem ou para os dados brutos da imagem).
Vamos chamar o primeiro número inteiro de ciclos e o segundo número inteiro de deslocamento .
Também definiremos a etapa de ponto flutuante como ciclos de 360 vezes divididos pela área da imagem ou step = 360 * cycles / (image width * image height)
.
Para cada pixel P na imagem, movendo uma linha de cada vez, da esquerda para a direita, de cima para baixo (ou seja, na ordem de leitura, se os pixels forem letras), faça o seguinte:
Aumente a tonalidade de P em graus de deslocamento (retornando de 360 para 0, se necessário).
Em seguida, aumentar compensado por etapa .
Salve, exiba ou imprima a imagem resultante em qualquer formato de arquivo de imagem comum.
Este procedimento aumenta incrementalmente a tonalidade de todos os pixels da imagem, fazendo ciclos em loop completo ao redor do arco-íris de tonalidades , começando inicialmente por compensar a tonalidade por offset .
Quando os ciclos são 1 e o deslocamento é 0, como na imagem da Noite estrelada acima, as linhas superior e inferior dos pixels praticamente não têm mudança de tonalidade, mas há um ciclo de cores completo.
Detalhes
Os ciclos podem ser qualquer número inteiro não negativo, mas você pode assumir que o deslocamento é de 0 a 359, inclusive.
Quando o ciclo é 0, todos os pixels da imagem terão sua tonalidade alterada exatamente como o deslocamento, pois a etapa também deve ser 0. (Nesse caso, se o deslocamento for 0, a imagem não será alterada.)
Você pode assumir que ciclos e deslocamento são inseridos como flutuadores, se desejado (por exemplo, em
1.0
vez de1
). (Percebo que eles não precisam ser números inteiros, apenas simplifica o desafio.)"Matiz" refere-se à versão do espaço de cores RGB, comum nos modelos de cores HSL / HSV .
Exemplos
Original:
Ciclos = 1, deslocamento = 0:
Ciclos = 1, deslocamento = 180:
Original:
Ciclos = 2, deslocamento = 60:
Original:
(Obrigado ArtOfCode .)
Ciclos = 1, deslocamento = 120:
Original:
(Obrigado, maçaneta da porta .)
Ciclos = 1, deslocamento = 0:
Ciclos = 4, deslocamento = 0:
Ciclos = 200, deslocamento = 0:
Ciclos = 30000, deslocamento = 0:
(Essas imagens podem não ser perfeitas em pixels devido à compressão do imgur.)
Pontuação
O código mais curto em bytes vence. O desempatador é a resposta votada mais alta.
As respostas que postarem suas próprias imagens de teste interessantes receberão mais pontos de brownie de mim.