Tantangan ini adalah tentang secara bertahap mengubah rona dalam gambar untuk membuat gambar yang cantik seperti ini:
( asli )
Tantangan
Tulis program atau fungsi yang menggunakan dua bilangan bulat non-negatif dan gambar dalam format file gambar umum apa pun yang Anda pilih (Anda dapat mengambil jalur ke gambar atau data gambar mentah).
Kami akan memanggil integer pertama siklus dan integer kedua offset .
Kami juga akan menetapkan langkah titik mengambang sebagai 360 kali siklus dibagi dengan luas gambar, atau step = 360 * cycles / (image width * image height)
.
Untuk setiap piksel P dalam gambar, memindahkan satu baris sekaligus, kiri-ke-kanan, atas-ke-bawah (yaitu dalam urutan pembacaan jika pikselnya berupa huruf), lakukan hal berikut:
Meningkatkan rona dari P oleh diimbangi derajat (perulangan sekitar 360-0 jika perlu).
Kemudian tingkatkan offset dengan langkah .
Simpan, tampilkan, atau hasilkan gambar mentah yang dihasilkan dalam format file gambar apa pun yang umum.
Prosedur ini secara bertahap meningkatkan rona dari semua piksel dalam gambar, membuat putaran lingkaran penuh di sekitar pelangi rona , mulai dengan awalnya mengimbangi rona dengan offset .
Ketika siklus 1 dan offset adalah 0, seperti pada gambar Starry Night di atas, baris atas dan bawah piksel praktis tidak memiliki pergeseran rona tetapi di antaranya ada siklus warna penuh.
Detail
Siklus dapat berupa bilangan bulat non-negatif, tetapi Anda dapat menganggap bahwa offset dari 0 hingga 359 inklusif.
Ketika siklus adalah 0, setiap pixel dalam gambar akan memiliki rona bergeser persis diimbangi sejak langkah harus 0 juga. (Dalam hal ini jika offset adalah 0 maka gambar tidak berubah sama sekali.)
Anda dapat menganggap siklus dan offset adalah input mengapung jika diinginkan (yaitu,
1.0
bukan1
). (Saya menyadari mereka tidak perlu bilangan bulat sama sekali, itu hanya membuat tantangan lebih sederhana.)"Hue" mengacu pada versi ruang warna RGB, umum dalam model warna HSL / HSV .
Contohnya
Asli:
Siklus = 1, offset = 0:
Siklus = 1, offset = 180:
Asli:
Siklus = 2, offset = 60:
Asli:
(Terima kasih ArtOfCode .)
Siklus = 1, offset = 120:
Asli:
(Terima kasih Doorknob .)
Siklus = 1, offset = 0:
Siklus = 4, offset = 0:
Siklus = 200, offset = 0:
Siklus = 30000, offset = 0:
(Gambar-gambar ini mungkin bukan piksel yang sempurna karena imgur mengompresnya.)
Mencetak gol
Kode terpendek dalam byte menang. Tiebreaker adalah jawaban dengan suara lebih tinggi.
Jawaban yang memposting gambar tes keren mereka sendiri akan mendapatkan poin lebih banyak dari saya.
sumber
Jawaban:
Pyth, 86 byte, program lengkap
Pyth tidak memiliki konversi ruang warna bawaan - ini adalah real deal.
Mengambil input dalam format berikut di stdin:
Gambar output ditulis untuk
o.png
.Ini berfungsi dengan memutar kubus warna di sekitar diagonal, dan kemudian menjepit nilai apa pun di luar rentang.
Jika
a
sudut untuk dirotasi, danr, g, b
merupakan warna input, kami menghitung warna barur', g', b'
dengan:sumber
Python, 379 byte
Ini mengambil jalur ke
.jpg
input sebagai. Ini tidak akan berfungsi dengan png, meskipun Anda dapat mengubahr,g,b=i.split();
ker,g,b=i.split()[:3];
untuk memuat gambar png.Berikut ini beberapa gambar:
Asli:
Offset: 0, Siklus: 4
Asli:
Offset 0, 1 siklus:
Asli:
Offset 0, 2,5 siklus:
sumber
Java (Program lengkap),
491488 bytes (Terima kasih @Geobits)Tidak disatukan
Penjelasan
Penggunaan: Cukup mudah. Kompilasi dengan
java -c Q.java
. Jalankan denganjava Q <cycles> <offset> <imagepath>
. Akan menimpa gambar yang ada, jadi berhati-hatilah.Saya akan membuat solusi metode saja pada awalnya tetapi saya tidak tahu bagaimana menangani impor pada mereka, jadi saya pikir saya akan menjadi java penuh , ini mungkin tidak akan menang lagi: ^)
Hasil:
Image 1: 1 cycle, 0 offset
Image 1: 1 cycle, 180 offset
Image 2: 2 cycles, 60 offset
Image 3: 1 cycle, 120 offset
Image 4: 1 cycle, 0 offset
Image 4: 4 cycles, 0 offset
Image 4: 200 cycles, 0 offset
Bonus: The Starry Night, 1 cycle, 0 offset
sumber
java.io.File
bukanjava.io.*
?import
**static
**, bukan adilimport
?ImageIO::read
danImageIO::write
tanpa harus menambahkanImageIO.
: Ini menambah 9 byte (static .*
) tetapi menyimpan 16 (ImageIO.
dua kali).