Es ist Winter und die Zeit des Jahres ist gekommen, in der es langsam kalt wird (und in Kürze komische bunte Kopftücher auftauchen). Schreiben wir einen Code, um Avatar-Bilder und andere Bilder einzufrieren, damit sie zum Thema passen!
Eingang
Die Eingabe für Einsendungen bei dieser Herausforderung sollte ein Bild (das Bild, das eingefroren werden soll) und eine Zahl (der Schwellenwert, der später erläutert wird) sein.
Sie können das Bild so eingeben, wie es Ihre Sprache unterstützt (Dateipfad oder URL als Argument, Übernahme aus der Zwischenablage, Ziehen und Ablegen eines Bildes usw.) und in jedem hier aufgeführten Format , das Farben in RGB ausdrückt (Sie) kann stattdessen RGBA unterstützen / erfordern, wenn Sie möchten, aber dies ist keine Voraussetzung).
Sie können die Nummer auch wie gewünscht eingeben (Befehlszeilenargument, STDIN, Eingabedialog usw.), mit Ausnahme der Hardcodierung in Ihrem Programm (z. B. n=10
). Wenn Sie einen Dateipfad / URL für das Bild verwenden, muss dieser ebenfalls auf diese Weise eingegeben werden.
Ausgabe
Das Programm muss das Bild gemäß der folgenden Beschreibung verarbeiten und es dann wie gewünscht ausgeben (in eine Datei, auf dem Bildschirm anzeigen, in die Zwischenablage kopieren usw.).
Beschreibung
Einreichungen sollten das Bild mit den folgenden drei Schritten verarbeiten. n
bezieht sich auf die Nummer, die Ihr Programm als Eingabe zusammen mit dem Bild erhalten hat.
Wenden Sie eine Unschärfe des Radius
n
auf das Eingabebild an, indem Sie die R-, G- und B-Werte jedes Pixels durch die durchschnittlichen R-, G- und B-Werte aller Pixel innerhalb eines Manhattan-Abstandes vonn
Pixeln ersetzen und alle außerhalb der Grenzen liegenden Koordinaten ignorieren. (Dh alle Pixel, bei denen die Summe der Differenz in X und der Differenz in Y kleiner oder gleich istn
.)(Hinweis: Ich habe für die obigen Bilder eine Gaußsche Unschärfe verwendet, da es eine praktische integrierte Funktion gab, sodass Ihre Bilder möglicherweise etwas anders aussehen.)
Stellen Sie jedes Pixel auf ein zufälliges Pixel in einem Abstand von
n/2
Pixeln ein ("Abstand" wird auf dieselbe Weise wie im vorherigen Schritt definiert).Dies sollte durch Durchlaufen des Bildes und Einstellen jedes Pixels auf ein zufälliges Pixel in diesem Bereich erfolgen, sodass einige Pixel möglicherweise vollständig verschwinden und andere dupliziert werden.
Alle Änderungen müssen gleichzeitig wirksam werden. Verwenden Sie mit anderen Worten die alten Werte der Pixel (nach Schritt 1, aber vor diesem Schritt) und nicht die neuen Werte, nachdem Sie sie auf ein zufälliges Pixel festgelegt haben.
Multiplizieren Sie den "blauen" RGB-Wert jedes Pixels mit 1,5, begrenzen Sie ihn auf 255 (oder auf einen beliebigen Maximalwert für ein Pixelband) und runden Sie ihn ab.
Regeln
Sie können in Ihre Sprache integrierte Bildbibliotheken / Bildverarbeitungsfunktionen verwenden. Sie dürfen jedoch keine Funktionen verwenden, die eine der drei in der Beschreibung genannten Hauptaufgaben ausführen. Beispielsweise können Sie keine
blur
Funktion verwenden, aber einegetPixel
Funktion ist in Ordnung.Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
dx <= n && dy <= n
ist eine genaue Darstellung der Entfernung von Manhattan, nicht wahr?