Kış mevsimi ve yılın soğumaya başlaması için geldi (ve garip renkli saçların ortaya çıkmaya başlaması ... yakında). Avatar resimlerini ve diğer görüntüleri donmuş yapmak için temaya uydurmak için biraz kod yazalım!
Giriş
Bu zorluğa katılacak girdiler bir resim (dondurulacak resim) ve bir sayı (daha sonra açıklanacak eşik) olmalıdır.
Resmi, dilinizin desteklediği herhangi bir şekilde (bir dosya yolu veya argüman olarak bir URL, panodan alarak, bir resmi sürükleyip bırakarak, vb.) Ve burada renkleri RGB olarak ifade eden herhangi bir formatta girebilirsiniz. isterseniz RGBA'yı destekleyebilir / talep edebilir, ancak bu bir gereklilik değildir.
Numarayı istediğiniz şekilde (komut satırı argümanı, STDIN, giriş diyalogu, vb. n=10
) Programınıza kodlama haricinde girebilirsiniz (ör. ). Görüntü için bir dosya yolu / URL kullanıyorsanız, bu şekilde de girilmelidir.
Çıktı
Program, görüntüyü aşağıdaki açıklamaya göre işlemeli ve sonra istediğiniz şekilde (bir dosyaya, ekranda göstererek, panoya koyarak vb.) Çıkarmalıdır.
Açıklama
Gönderimler, görüntüyü aşağıdaki üç adımda işlemelidir. n
programınızın resimle birlikte girdi olarak aldığı sayı anlamına gelir.
Yarıçapın bir bulanıklık uygulama
n
ortalama R, G, ve içindeki bütün pikseller B değerleri, her bir pikselin R, G ve B değerleri değiştirilerek giriş görüntüsüne Manhattan mesafe arasından
, piksel her dışı sınırları koordinatları dikkate almaz. (Yani, X'deki farkın toplamı ve Y'deki farkın toplamının ona eşit veya daha küçük olduğu tüm piksellern
.)(not: Yukarıdaki resimler için Gauss bulanıklığı kullandım, çünkü bunun için uygun bir yerleşik işlev vardı, bu yüzden resimleriniz biraz farklı görünebilir.)
Her pikseli piksel mesafesindeki rastgele bir piksele ayarlayın
n/2
("mesafe", önceki adımdakiyle aynı şekilde tanımlanır).Bu, görüntüde dolaşarak ve her pikseli bu aralıkta rastgele bir piksele ayarlayarak yapılmalıdır, böylece bazı pikseller tamamen kaybolabilir ve bazıları çoğaltılabilir.
Tüm değişiklikler aynı anda uygulanmalıdır. Başka bir deyişle, piksellerin eski değerlerini kullanın (adım 1'den sonra ancak bu adımdan önce), yeni değerleri rastgele bir piksele ayarladıktan sonra kullanmayın.
Her pikselin "mavi" RGB değerini 1,5 ile çarpın, 255'te kapatın (veya bir piksel bandı için maksimum değer ne olursa olsun) ve aşağı yuvarlayın.
kurallar
Dilinizde yerleşik olan görüntü kitaplıklarını / görüntü işleme ile ilgili işlevleri kullanabilirsiniz; ancak, açıklamada belirtilen üç ana görevden birini gerçekleştiren işlevleri kullanamazsınız. Örneğin, bir
blur
işlevi kullanamazsınız , ancak birgetPixel
işlev iyidir.Bu kod-golf , yani bayttaki en kısa kod kazanır!
dx <= n && dy <= n
Manhattan mesafesinin doğru bir temsili, değil mi?