Sekoitetaan kuvan pixelit ja palautetaaan oikeaan alkuperäiseen paikkaansa, missä vaiheessa pixelisekamelskasta tunnistat, mikä maalaus on kyseessä? Videossa pyörii sekunnit...(koodi 1)
https://youtu.be/l-gVnuuuWXk
https://youtu.be/MzdoXe0NtJI
Melko helppoa lienee monille ainakin taiteen harrastajille, sillä jo kuvan värimaailma kertoo mikä maalaus on kyseessä?
No himskatti! Arvotaan uudet väritkin, jotka palautetaan alkuperäisiin arvoihinsa (tämän tein koodilla 2).
Vaan eipä tuo kai mennyt sen vaikeammaksi/helpommaksi, vaikka ihan alusta ei varmasti tunnista?
Ohjelmoin yksittäisiä frameja ja tein animaation fps 20 arvolla MakeAvi ohjelmalla.
Koodi 1:
rebol[] kuva: load %kuva1.jpg maxx: kuva/size/x maxy: kuva/size/y print "odota..." plot: copy[] main: layout [ box (as-pair (maxx) (maxy)) white effect reduce ['draw plot] ] kuva2: copy/part skip to-image main 20x20 (as-pair maxx maxy) fontti: make face/font [name: "Arial" size: 80] ;asetetaan fontti x1: copy[] y1: copy[] väri1: copy[] x2: copy[] y2: copy[] for x 0 (maxx - 1) 1 [ ;asetetaan tyhjään kuvaan kuva2 pixelit sattuman varaiseen paikkaan for y 0 (maxy - 1) 1 [ append x1 x append y1 y arpax: random (maxx - 1) ;arvotaan uusi paikka koordinaatille x,y arpay: random (maxy - 1) append x2 arpax append y2 arpay apuväri: pick kuva (as-pair arpax arpay) väri: pick kuva (as-pair x y) append väri1 väri poke kuva2 (as-pair x y) apuväri poke kuva2 (as-pair arpax arpay) väri ] ] kuvalkm: 600 sek: 0 for kuvaind 1 kuvalkm 1 [ ; palautetaan 600 kuvassa pixelit oikeaan alkuperäiseen paikkaansa indeksi: 1 for x 0 (maxx - 1) 1 [ for y 0 (maxy - 1) 1 [ askelx: - (x2/(indeksi) - (x1/(indeksi))) / kuvalkm askely: - (y2/(indeksi) - (y1/(indeksi))) / kuvalkm xp: x2/(indeksi) + (kuvaind * askelx) yp: y2/(indeksi) + (kuvaind * askely) poke kuva2 (as-pair xp yp) (väri1/(indeksi)) indeksi: indeksi + 1 ] ] plot: copy[pen white] ;otetaan käyttöön uusi grafiikka blockki.... append plot compose [ font (fontti) image kuva2 ;...asetetaan siihen kmuodostettu kuva2 ja pen white text 30x30 (to-string sek) ;..., ja kirjoitetaan sekunnit ] main: layout [ box (as-pair (maxx) (maxy)) white effect reduce ['draw plot] ] apukuva: copy/part skip to-image main 20x20 (as-pair maxx maxy) save/png to-file rejoin ["1kuva" kuvaind ".png"] apukuva print kuvaind if (mod kuvaind 20) = 0 [sek: sek + 1] ] for i 601 660 1 [ ; asetetaan loppuun vielä selvyyden vuoksi 60 kpl selkeää kuvaa / framea save/png to-file rejoin ["1kuva" i ".png"] kuva ] halt
Koodi 2:
rebol[] kuva: load %kuva3.jpg maxx: kuva/size/x maxy: kuva/size/y random/seed now/precise print "odota..." plot: copy[] main: layout [ panel1: box (as-pair maxx maxy) white effect reduce ['draw plot] ] kuva2: copy/part skip to-image main 20x20 (as-pair maxx maxy) ;luodaan tyhjäkuvapohja fontti: make face/font [name: "Arial" size: 80] ;asetetaan fontti x1: copy[] y1: copy[] x2: copy[] y2: copy[] arvotutvärit: copy[] oikeatvärit: copy[] ;arvotaan alkuvärit pixeleitä: 0 for x 0 (maxx - 1) 1 [ for y 0 (maxy - 1) 1 [ append arvotutvärit random 255.255.255 vä: pick kuva (as-pair x y) append oikeatvärit vä ;otetaan talteen myöskin oikea väri ] ] print pixeleitä ind: 1 for x 0 (maxx - 1) 1 [ ;...asetetaan tyhjään kuvaan pixelit sattuman varaiseen paikkaan ja ;sattuman varaisilla väreillä for y 0 (maxy - 1) 1 [ append x1 x append y1 y arpax: random (maxx - 1) ;arvotaan uusi paikka koordinaatille x,y arpay: random (maxy - 1) append x2 arpax append y2 arpay poke kuva2 (as-pair arpax arpay) (arvotutvärit/(ind)) ind: ind + 1 ] ] kuvalkm: 600 sek: 0 for kuvaind 1 kuvalkm 1 [ ; palautetaan kuvalkm:ssa kuvassa pixelit oikeaan alkuperäiseen paikkaansa ja väriinsä indeksi: 1 for x 0 (maxx - 1) 1 [ for y 0 (maxy - 1) 1 [ askelx: - (x2/(indeksi) - (x1/(indeksi))) / kuvalkm askely: - (y2/(indeksi) - (y1/(indeksi))) / kuvalkm xp: x2/(indeksi) + (kuvaind * askelx) yp: y2/(indeksi) + (kuvaind * askely) dr: (oikeatvärit/(indeksi)/1 - arvotutvärit/(indeksi)/1) / kuvalkm ;delta R dg: (oikeatvärit/(indeksi)/2 - arvotutvärit/(indeksi)/2) / kuvalkm ;delta G db: (oikeatvärit/(indeksi)/3 - arvotutvärit/(indeksi)/3) / kuvalkm ;delta B eli määrä joka framejen välissä väriin lisätään väriR: arvotutvärit/(indeksi)/1 + (kuvaind * dr) väriG: arvotutvärit/(indeksi)/2 + (kuvaind * dg) väriB: arvotutvärit/(indeksi)/3 + (kuvaind * db) väri: to-tuple compose [(to-integer väriR) (to-integer väriG) (to-integer väriB)] poke kuva2 (as-pair xp yp) (väri) indeksi: indeksi + 1 ] ] plot: copy[pen white] ;otetaan käyttöön uusi grafiikka blockki.... append plot compose [ font (fontti) image kuva2 ;asetetaan siihen kuva2 pen white text 30x30 (to-string sek) ;, jotta siihen voidaan kirjoittaa sekunnit ] main: layout [ box (as-pair (maxx) (maxy)) white effect reduce ['draw plot] ] apukuva: copy/part skip to-image main 20x20 (as-pair maxx maxy) save/png to-file rejoin ["3kuva" kuvaind ".png"] apukuva print kuvaind if (mod kuvaind 20) = 0 [sek: sek + 1] ] ; asetetaan loppuun vielä selvyyden vuoksi 60 kpl selkeää kuvaa / framea for i 601 660 1 [ save/png to-file rejoin ["3kuva" i ".png"] kuva ] halt
Hauska. Tunnistin vasta n. 00:27. :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.