Ce défi consiste à changer progressivement les teintes d'une image pour créer de jolies images comme celle-ci:
( original )
Défi
Écrivez un programme ou une fonction qui accepte deux nombres entiers non négatifs et une image dans n'importe quel format de fichier d'image courant de votre choix (vous pouvez prendre un chemin vers l'image ou les données d'image brutes).
Nous appellerons le premier entier les cycles et le deuxième entier le décalage .
Nous allons également définir à virgule flottante étape comme 360 fois les cycles divisé par la zone de l'image, ou step = 360 * cycles / (image width * image height)
.
Pour chaque pixel P de l'image, en déplaçant une ligne à la fois, de gauche à droite, de haut en bas (c'est-à-dire dans l'ordre de lecture si les pixels étaient des lettres), procédez comme suit:
Augmentez la teinte de P par degrés de décalage (boucle de 360 à 0 si nécessaire).
Augmentez ensuite le décalage par étape .
Enregistrez, affichez ou affichez en brut l'image résultante dans n'importe quel format de fichier d'image courant.
Cette procédure augmente progressivement la teinte de tous les pixels de l'image, faisant des cycles de boucles complètes autour de l' arc -en- ciel de teinte , en commençant par compenser initialement la teinte par décalage .
Lorsque les cycles est 1 et le décalage est 0, comme dans l'image de la nuit étoilée ci-dessus, les rangées de pixels supérieure et inférieure n'ont pratiquement pas de décalage de teinte, mais entre les deux, il y a un cycle de couleur complet.
Détails
Les cycles peuvent être n'importe quel entier non négatif, mais vous pouvez supposer que le décalage est compris entre 0 et 359 inclus.
Lorsque cycles est 0, chaque pixel de l'image aura sa teinte décalée par exactement décalage depuis étape doit être 0 aussi. (Dans ce cas, si le décalage est égal à 0, l'image ne change pas du tout.)
Vous pouvez supposer que les cycles et le décalage sont saisis sous forme de flottants si vous le souhaitez (c'est-
1.0
à- dire au lieu de1
). (Je me rends compte qu'ils ne doivent pas du tout être des entiers, cela rend le défi plus simple.)"Teinte" fait référence à la version de l'espace colorimétrique RVB, courante dans les modèles de couleurs HSL / HSV .
Exemples
Original:
Cycles = 1, décalage = 0:
Cycles = 1, décalage = 180:
Original:
Cycles = 2, décalage = 60:
Original:
(Merci ArtOfCode .)
Cycles = 1, décalage = 120:
Original:
(Merci Poignée de porte .)
Cycles = 1, décalage = 0:
Cycles = 4, décalage = 0:
Cycles = 200, décalage = 0:
Cycles = 30000, décalage = 0:
(Ces images peuvent ne pas être parfaites en pixels en raison de l'imgur de les compresser.)
Notation
Le code le plus court en octets gagne. Tiebreaker est la réponse la plus votée.
Les réponses qui affichent leurs propres images de test au look cool recevront plus de points brownie de ma part.
la source
Réponses:
Pyth, 86 octets, programme complet
Pyth n'a pas de conversions d'espace colorimétrique intégrées - c'est la vraie affaire.
Prend l'entrée au format suivant sur stdin:
L'image de sortie est écrite
o.png
.Cela fonctionne en faisant pivoter le cube de couleur autour de sa diagonale, puis en fixant toutes les valeurs en dehors de la plage.
Si
a
est l'angle de rotation etr, g, b
la couleur d'entrée, nous calculons la nouvelle couleurr', g', b'
par:la source
Python, 379 octets
Cela prend un chemin vers une
.jpg
entrée. Il ne fonctionnera pas avec .png, mais vous pouvez changerr,g,b=i.split();
pourr,g,b=i.split()[:3];
charger une image .png.Voici quelques images:
Original:
Décalage: 0, Cycles: 4
Original:
Décalage 0, 1 cycle:
Original:
Décalage 0, 2,5 cycles:
la source
Java (programme complet),
491488 octets (Merci @Geobits)Non golfé
Explication
Utilisation: assez simple. Compilez avec
java -c Q.java
. Courez avecjava Q <cycles> <offset> <imagepath>
. Remplacera l'image existante, alors soyez prudent.J'allais faire une solution uniquement méthode au début, mais je ne savais pas trop comment gérer les importations sur ceux-ci, alors je me suis dit que j'irais en Java complet , cela ne gagnera probablement pas de toute façon: ^)
Résultats:
Image 1: 1 cycle, 0 offset
Image 1: 1 cycle, 180 offset
Image 2: 2 cycles, 60 offset
Image 3: 1 cycle, 120 offset
Image 4: 1 cycle, 0 offset
Image 4: 4 cycles, 0 offset
Image 4: 200 cycles, 0 offset
Bonus: The Starry Night, 1 cycle, 0 offset
la source
java.io.File
placejava.io.*
?import
**static
**, pas seulementimport
?ImageIO::read
etImageIO::write
sans avoir àImageIO.
ajouter: cela ajoute 9 octets (static .*
) mais enregistre 16 (ImageIO.
deux fois).