Jest zima i nadeszła pora roku, aby zaczęło się robić zimno (i dziwne kolorowe chusty na głowie zaczęły pojawiać się ... wkrótce). Napiszmy kod, aby zamrozić zdjęcia awatarów i inne obrazy, aby pasowały do motywu!
Wkład
Dane wejściowe do zgłoszeń do tego wyzwania powinny być obrazem (obraz, który ma zostać zamrożony) i liczbą (próg, który zostanie wyjaśniony później).
Możesz wprowadzić obraz w dowolny sposób, w jaki obsługuje go Twój język (ścieżka pliku lub adres URL jako argument, biorąc go ze schowka, przeciągając i upuszczając obraz itp.) Oraz w dowolnym wymienionym tutaj formacie, który wyraża kolory w RGB (ty może zamiast tego obsługiwać / wymagać RGBA, ale nie jest to wymagane).
Możesz wprowadzić liczbę w dowolny sposób (argument wiersza poleceń, STDIN, okno dialogowe wprowadzania danych itp.), Z wyjątkiem zakodowania jej na stałe w programie (np. n=10
). Jeśli używasz ścieżki pliku / adresu URL obrazu, należy go również wprowadzić w ten sposób.
Wydajność
Program musi przetworzyć obraz zgodnie z poniższym opisem, a następnie wydrukować go w dowolny sposób (do pliku, pokazując go na ekranie, umieszczając w schowku itp.).
Opis
Zgłoszenia powinny przetwarzać obraz w trzech następujących krokach. n
odnosi się do liczby otrzymanej przez program jako dane wejściowe wraz z obrazem.
Stosowanie rozmycia promienia
n
do obrazu wejściowego przez zastąpienie R każdego piksela, G, i wartości B o średniej R, G, i wartości B wszystkich pikseli w odległości Manhattan zn
pikseli, ignorując się aut współrzędnych. (Tj. Wszystkie piksele, w których suma różnicy w X i różnicy w Y jest mniejsza lub równan
.)(uwaga: Użyłem rozmycia Gaussa dla powyższych obrazów, ponieważ była dla niego wygodna wbudowana funkcja, dzięki czemu twoje obrazy mogą wyglądać nieco inaczej.)
Ustaw każdy piksel na losowy piksel w odległości kilku
n/2
pikseli („odległość” jest zdefiniowana w taki sam sposób, jak w poprzednim kroku).Należy to zrobić, zapętlając obraz i ustawiając każdy piksel na losowy piksel w tym zakresie, aby niektóre piksele zniknęły całkowicie, a niektóre mogły zostać powielone.
Wszystkie zmiany muszą obowiązywać w tym samym czasie. Innymi słowy, użyj starych wartości pikseli (po kroku 1, ale przed tym krokiem), a nie nowych wartości po ustawieniu ich na losowy piksel.
Pomnóż „niebieską” wartość RGB każdego piksela przez 1,5, ograniczając go do 255 (lub jakąkolwiek maksymalną wartością dla pasma pikseli) i zaokrąglając w dół.
Zasady
Możesz korzystać z bibliotek obrazów / funkcji związanych z przetwarzaniem obrazu wbudowanych w twój język; nie można jednak używać żadnych funkcji, które wykonują jedno z trzech głównych zadań wymienionych w opisie. Na przykład nie możesz użyć
blur
funkcji, alegetPixel
funkcja jest w porządku.To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
dx <= n && dy <= n
jest dokładnym odwzorowaniem odległości na Manhattanie, prawda?