Эта задача заключается в постепенном изменении оттенков на изображении, чтобы сделать красивые картинки, подобные этой:
( оригинал )
Вызов
Напишите программу или функцию, которая принимает два неотрицательных целых числа и изображение в любом общем формате файла изображения по вашему выбору (вы можете указать путь к изображению или необработанным данным изображения).
Мы назовем первое целое число циклами, а второе целое - смещением .
Мы также определим шаг с плавающей точкой как 360-кратные циклы, деленные на площадь изображения, или step = 360 * cycles / (image width * image height)
.
Для каждого пикселя P в изображении, перемещая по одной строке за раз, слева направо, сверху вниз (т.е. в порядке чтения, если пиксели были буквами), выполните следующие действия:
Увеличение цветового тона от Р по офсетным градусам (цикл вокруг от 360 до 0 , если это необходимо).
Затем увеличьте смещение за шагом .
Сохраните, отобразите или выведите исходное изображение в любом общем формате файла изображения.
Эта процедура постепенно увеличивает оттенок всех пикселей в изображении, делая циклы полных циклов вокруг радуги оттенка , начиная с первоначального смещения оттенка смещением .
Когда число циклов равно 1, а смещение равно 0, как на приведенном выше изображении «Звездная ночь», верхний и нижний ряды пикселей практически не имеют сдвига оттенка, но между ними существует полный цветовой цикл.
Детали
Циклы могут быть любым неотрицательным целым числом, но вы можете предположить, что смещение составляет от 0 до 359 включительно.
Когда число циклов равно 0, оттенок каждого пикселя в изображении будет смещен на точное смещение, поскольку шаг также должен быть равен 0. (В этом случае, если смещение равно 0, изображение не изменяется вообще.)
При желании вы можете предположить, что циклы и смещение вводятся как числа с плавающей запятой (т.е.
1.0
вместо1
). (Я понимаю, что они вовсе не должны быть целыми числами, это просто упрощает задачу.)«Оттенок» относится к версии цветового пространства RGB, распространенной в цветовых моделях HSL / HSV .
Примеры
Оригинал:
Cycles = 1, offset = 0:
Циклы = 1, смещение = 180:
Оригинал:
Cycles = 2, offset = 60:
Оригинал:
(Спасибо ArtOfCode .)
Циклы = 1, смещение = 120:
Оригинал:
(Спасибо дверная ручка .)
Cycles = 1, offset = 0:
Cycles = 4, offset = 0:
Cycles = 200, смещение = 0:
Cycles = 30000, смещение = 0:
(Эти изображения могут быть не идеальными из-за сжатия изображений imgur.)
счет
Самый короткий код в байтах побеждает. Ответ Tiebreaker выше.
Ответы, которые публикуют свои собственные классные тестовые изображения, получат от меня больше баллов