Diese Herausforderung besteht darin, die Farbtöne in einem Bild schrittweise zu verschieben, um hübsche Bilder wie das folgende zu erstellen:
( original )
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die zwei nicht negative Ganzzahlen und ein Bild in einem beliebigen gängigen Bilddateiformat Ihrer Wahl enthält (Sie können einen Pfad zum Bild oder zu den Rohbilddaten angeben).
Wir nennen die erste Ganzzahl die Zyklen und die zweite Ganzzahl den Offset .
Wir definieren den Gleitkomma- Schritt auch als 360-malige Zyklen geteilt durch die Bildfläche oderstep = 360 * cycles / (image width * image height)
.
Führen Sie für jedes Pixel P im Bild, das sich zeilenweise von links nach rechts und von oben nach unten bewegt (dh in der Lesereihenfolge, wenn die Pixel Buchstaben waren), die folgenden Schritte aus:
Erhöhen Sie den Farbton von P um Versatzgrade (ggf. von 360 auf 0).
Dann erhöht Offset von Schritt .
Speichern, Anzeigen oder Ausgeben des resultierenden Bildes in einem beliebigen gängigen Bilddateiformat.
Durch diesen Vorgang wird der Farbton aller Pixel im Bild inkrementell erhöht, und es werden vollständige Schleifen um den Farbtonregenbogen erstellt , wobei zunächst der Farbton um den Versatz versetzt wird .
Wenn die Anzahl der Zyklen 1 und der Versatz 0 beträgt, wie im obigen Sternennachtbild, haben die oberen und unteren Pixelreihen praktisch keine Farbtonverschiebung, dazwischen liegt jedoch ein vollständiger Farbzyklus.
Einzelheiten
Bei Zyklen kann es sich um eine beliebige nicht negative Ganzzahl handeln. Sie können jedoch davon ausgehen, dass der Offset zwischen 0 und einschließlich 359 liegt.
Wenn die Anzahl der Zyklen 0 ist, wird der Farbton jedes Pixels im Bild genau um einen Versatz verschoben, da der Schritt ebenfalls 0 sein muss. (In diesem Fall ändert sich das Bild überhaupt nicht, wenn der Versatz 0 ist.)
Sie können davon ausgehen, dass Zyklen und Offset bei Bedarf als Gleitkommazahlen eingegeben werden (dh
1.0
anstelle von1
). (Mir ist klar, dass es sich überhaupt nicht um ganze Zahlen handeln muss. Das macht die Herausforderung nur einfacher.)"Farbton" bezieht sich auf die in HSL / HSV-Farbmodellen übliche RGB-Farbraumversion .
Beispiele
Original:
Zyklen = 1, Offset = 0:
Zyklen = 1, Offset = 180:
Original:
Zyklen = 2, Versatz = 60:
Original:
(Danke ArtOfCode .)
Zyklen = 1, Offset = 120:
Original:
(Danke Türknauf .)
Zyklen = 1, Offset = 0:
Zyklen = 4, Offset = 0:
Zyklen = 200, Offset = 0:
Zyklen = 30000, Versatz = 0:
(Diese Bilder sind möglicherweise nicht pixelgenau, da sie imgur komprimiert wurden.)
Wertung
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist höher gestimmte Antwort.
Antworten, die ihre eigenen cool aussehenden Testbilder posten, werden mehr Brownie-Punkte von mir bekommen.