C'est l'hiver, et le moment de l'année est venu pour qu'il commence à faire froid (et que d'étranges couvre-chefs colorés commencent à apparaître ... bientôt). Écrivons du code pour faire des images d'avatar et d'autres images gelées, pour s'adapter au thème!
Contribution
La contribution aux soumissions à ce défi devrait être une image (l'image à faire figée) et un nombre (le seuil, qui sera expliqué plus loin).
Vous pouvez saisir l'image de n'importe quelle manière que votre langue prend en charge (un chemin de fichier ou une URL comme argument, la retirer du presse-papiers, faire glisser et déposer une image, etc.) et dans n'importe quel format répertorié ici qui exprime les couleurs en RVB (vous peut prendre en charge / exiger RGBA à la place si vous le souhaitez, mais ce n'est pas une exigence).
Vous pouvez également saisir le numéro de la manière que vous souhaitez (argument de ligne de commande, STDIN, boîte de dialogue de saisie, etc.), à l'exception de le coder en dur dans votre programme (ex. n=10
). Si vous utilisez un chemin de fichier / URL pour l'image, il doit également être saisi de cette manière.
Sortie
Le programme doit traiter l'image selon la description ci-dessous, puis la restituer comme vous le souhaitez (dans un fichier, l'afficher à l'écran, la mettre dans le presse-papiers, etc.).
La description
Les soumissions doivent traiter l'image avec les trois étapes suivantes. n
fait référence au numéro que votre programme a reçu en entrée avec l'image.
Appliquez un flou de rayon
n
à l'image d'entrée en remplaçant les valeurs R, G et B de chaque pixel par les valeurs moyennes R, G et B de tous les pixels dans une distance Manhattan den
pixels, en ignorant toutes les coordonnées hors limites. (C'est-à-dire tous les pixels où la somme de la différence en X et de la différence en Y est inférieure ou égale àn
.)(Remarque: j'ai utilisé un flou gaussien pour les images ci-dessus car il y avait une fonction intégrée pratique pour cela, donc vos images pourraient avoir un aspect légèrement différent.)
Définissez chaque pixel sur un pixel aléatoire à une distance de
n/2
pixels (la "distance" est définie de la même manière qu'à l'étape précédente).Cela doit être fait en parcourant l'image et en définissant chaque pixel sur un pixel aléatoire dans cette plage, de sorte que certains pixels peuvent disparaître complètement et certains peuvent être dupliqués.
Toutes les modifications doivent s'appliquer en même temps. En d'autres termes, utilisez les anciennes valeurs des pixels (après l'étape 1 mais avant cette étape), pas les nouvelles valeurs après les avoir définies sur un pixel aléatoire.
Multipliez la valeur RVB "bleue" de chaque pixel par 1,5, en la plafonnant à 255 (ou quelle que soit la valeur maximale pour une bande de pixels) et en arrondissant vers le bas.
Règles
Vous pouvez utiliser des bibliothèques d'images / des fonctions liées au traitement d'images intégrées dans votre langue; cependant, vous ne pouvez pas utiliser de fonctions exécutant l'une des trois tâches principales mentionnées dans la description. Par exemple, vous ne pouvez pas utiliser une
blur
fonction, mais unegetPixel
fonction est très bien.C'est le code-golf , donc le code le plus court en octets gagne!
dx <= n && dy <= n
est une représentation précise de la distance de Manhattan, n'est-ce pas?