Bu zorluk, böyle güzel fotoğraflar çekmek için görüntüdeki tonları aşamalı olarak değiştirmekle ilgilidir:
( orijinal )
Meydan okuma
Negatif olmayan iki tamsayı ve seçtiğiniz herhangi bir ortak görüntü dosyası biçiminde bir görüntü alan bir program veya işlev yazın (görüntüye ya da işlenmemiş görüntü verilerine yol alabilirsiniz).
Birinci tamsayı döngüleri , ikinci tamsayı ofseti arayacağız .
Ayrıca kayan nokta adımını , görüntünün alanına bölünen 360 kez çevrimler olarak da tanımlayacağız step = 360 * cycles / (image width * image height)
.
Görüntüdeki her piksel P için, her seferinde bir satır hareket, soldan sağa, yukarıdan aşağıya (piksellerin harfleri varsa okuma sırasına göre) aşağıdakileri yapın:
Artış renk arasında P ile ofset (gerekirse 0 360 etrafında döngü) derece.
Sonra artışla ofset tarafından adım .
Ortaya çıkan görüntüyü herhangi bir ortak görüntü dosyası biçiminde kaydedin, görüntüleyin veya çıktısını alın.
Bu prosedür, adım adım hale görüntüdeki tüm pikseller tonunu arttıran program aşamasında çevresinde tam döngüler renk gökkuşağı başlangıçta renk dengelenerek başlayarak ofset .
Ne zaman döngüleri 1 ve ofset yukarıdaki Yıldızlı Gece resimde olduğu gibi 0'dır tam renkli bir döngüsü var aralarında, üst ve piksellerin alt satırlar pratikte hiçbir renk kayması ama var.
ayrıntılar
Döngüler , negatif olmayan bir tamsayı olabilir, ancak ofsetin 0 ila 359 arasında olduğu varsayılabilir .
Ne zaman döngüleri 0'dır görüntüdeki her piksel kendi renk tam olarak kaymış olacak ofset beri adım da 0 olmalıdır. (Bu durumda ofset 0 ise, görüntü hiç değişmez.)
Döngüleri ve ofsetin istenirse float olarak girildiğini varsayarsınız (yani
1.0
yerine1
). (Tam sayı olmaları gerekmediğinin farkındayım, bu sadece mücadeleyi kolaylaştırıyor.)"Ton", HSL / HSV renk modellerinde ortak olan RGB renk alanı versiyonunu belirtir .
Örnekler
Orijinal:
Çevrimler = 1, ofset = 0:
Çevrimler = 1, ofset = 180:
Orijinal:
Çevrimler = 2, ofset = 60:
Orijinal:
(Teşekkürler ArtOfCode .)
Çevrimler = 1, ofset = 120:
Orijinal:
(Teşekkürler Doorknob .)
Çevrimler = 1, ofset = 0:
Çevrimler = 4, ofset = 0:
Çevrimler = 200, ofset = 0:
Çevrimler = 30000, ofset = 0:
(Bu görüntüler, sıkıştırdıkları sıkıştırmadan dolayı mükemmel pikseller olmayabilir.)
puanlama
Bayt cinsinden en kısa kod kazanır. Tiebreaker daha yüksek oyla cevap verdi.
Kendi harika görünen test resimlerini yayınlayan cevaplar benden daha fazla brownie puanı alacak.