Wyzwanie polega na stopniowym zmienianiu odcieni na obrazie w celu uzyskania ładnych zdjęć:
( oryginał )
Wyzwanie
Napisz program lub funkcję, która przyjmuje dwie nieujemne liczby całkowite i obraz w dowolnym wybranym przez siebie formacie pliku obrazu (możesz wybrać ścieżkę do obrazu lub surowych danych obrazu).
Pierwszą liczbę całkowitą nazywamy cyklami, a drugą liczbą całkowitą - przesunięcie .
Zdefiniujemy również krok zmiennoprzecinkowy jako cykle 360 razy podzielone przez obszar obrazu lub step = 360 * cycles / (image width * image height)
.
Dla każdego piksela P na obrazie, przesuwając jeden rząd na raz, od lewej do prawej, od góry do dołu (tj. W kolejności odczytu, jeśli piksele były literami), wykonaj następujące czynności:
Zwiększyć odcień z P przez offsetowych stopni (zapętlenie około od 360 do 0, jeśli to konieczne).
Następnie zwiększ przesunięcie krok po kroku .
Zapisz, wyświetl lub wyślij nieprzetworzony obraz wynikowy w dowolnym popularnym formacie pliku obrazu.
Ta procedura stopniowo zwiększa odcień wszystkich pikseli na obrazie, czyniąc cykle pełnymi pętlami wokół tęczy odcienia , zaczynając od początkowego przesunięcia odcienia przez przesunięcie .
Kiedy cykle wynoszą 1, a przesunięcie wynosi 0, jak na powyższym obrazie Gwieździstej nocy, górne i dolne rzędy pikseli praktycznie nie mają przesunięcia odcienia, ale pomiędzy nimi jest pełny cykl kolorów.
Detale
Cykle mogą być dowolnymi liczbami całkowitymi nieujemnymi, ale można założyć, że przesunięcie wynosi od 0 do 359 włącznie.
Gdy liczba cykli wynosi 0, każdy piksel na obrazie zostanie przesunięty o dokładnie przesunięcie, ponieważ krok musi również wynosić 0. (W takim przypadku, jeśli przesunięcie wynosi 0, obraz w ogóle się nie zmienia).
Możesz założyć, że cykle i przesunięcia są wprowadzane jako
1.0
liczby zmiennoprzecinkowe, jeśli jest to pożądane (tzn. Zamiast1
). (Zdaję sobie sprawę, że wcale nie muszą to być liczby całkowite, to po prostu upraszcza wyzwanie).„Barwa” oznacza wersję przestrzeni kolorów RGB, powszechną w modelach kolorów HSL / HSV .
Przykłady
Oryginalny:
Cykle = 1, przesunięcie = 0:
Cykle = 1, przesunięcie = 180:
Oryginalny:
Cykle = 2, przesunięcie = 60:
Oryginalny:
(Dzięki ArtOfCode .)
Cykle = 1, przesunięcie = 120:
Oryginalny:
(Dzięki Klamka .)
Cykle = 1, przesunięcie = 0:
Cykle = 4, przesunięcie = 0:
Cykle = 200, przesunięcie = 0:
Cykle = 30000, przesunięcie = 0:
(Te obrazy mogą nie być idealnie w pikselach z powodu kompresji ich przez Imgur.)
Punktacja
Najkrótszy kod w bajtach wygrywa. Tiebreaker jest wyżej głosowaną odpowiedzią.
Odpowiedzi, które opublikują własne fajnie wyglądające obrazy testowe, dostaną ode mnie więcej punktów brownie.