package Ġme . d ini amo . pixel art creator . controller Ċ Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġjavafx . beans . property . Boolean Property Ċ import Ġjavafx . beans . property . Simple Boolean Property Ċ import Ġjavafx . beans . property . Simple String Property Ċ import Ġjavafx . scene . control . Label Ċ import Ġjavafx . scene . paint . Paint Ċ import Ġjavafx . stage . FileChooser Ċ import Ġjavafx . util . Duration Ċ import Ġme . d ini amo . pixel art creator .* Ċ import Ġme . d ini amo . pixel art creator . view . Main View Ċ import Ġt orn ad of x . Controller Ċ import Ġt orn ad of x . remove From Parent Ċ import Ġt orn ad of x . run Later Ċ import Ġt orn ad of x . text Ċ import Ġjava . io . File Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . math . floor Ċ Ċ class ĠMain Controller Ġ: ĠController () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmain View : ĠMain View Ġby Ġinject () ĊĊĠĠĠ Ġval Ġwidth Property Ġ= ĠSimple String Property () ĊĠĠĠ Ġval Ġheight Property Ġ= ĠSimple String Property () ĊĊĠĠĠ Ġprivate Ġvar Ġselected File : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġselected File Label : ĠLabel ĊĊĠĠĠ Ġval Ġpretty Print Property Ġ= ĠSimple Boolean Property () ĊĊĠĠĠ Ġprivate Ġval Ġgreen Ġ= ĠPaint . valueOf ("# 0 0 ff 0 0 ") ĊĊĠĠĠ Ġfun Ġchoose File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġt orn ad of x . choose File ( title Ġ= Ġ" Choose Ġan Ġimage Ġto Ġconvert ", Ġfilters Ġ= Ġempty Array ()) ĊĠĠĠĠĠĠĠ Ġif ( files . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfiles . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected File Label . text Ġ= Ġfile . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected File Ġ= Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Data Ġ= Ġset Size ( Image IO . read ( selected File ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Property . get ()?. toInt OrNull () Ġ?: Ġ- 1 , Ġheight Property . get ()?. toInt OrNull () Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġimage Data . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġmutable ListOf < JsonObject >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Width Ġ= Ġpixels . width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġ( image Width Ġ* Ġpixels . height Ġ* Ġ 4 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ% Ġ 4 Ġ!= Ġ 0 Ġ&& Ġi Ġ!= Ġ 0 ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( i Ġ/ Ġ 4 ) Ġ% Ġimage Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġfloor (( i Ġ/ Ġ 4 ) Ġ/ Ġimage Width . toDouble ()). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixel Ġ= Ġpixels . get Pixel ( x , Ġy , ĠInt Array ( pixels . num B ands )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . add ( getBlock ( x , Ġy , Ġpixel [ 0 ]. to Two Digit String () Ġ+ Ġpixel [ 1 ]. to Two Digit String () Ġ+ Ġpixel [ 2 ]. to Two Digit String (), Ġ" 6 2 8 b 2 d 6 1 - 5 ceb - 4 3 e 9 - 8 3 3 4 - a 4 1 3 5 5 6 6 df 7 a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġget Base ( blocks ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Blueprint ( base . toJson String ( pretty Print Ġ= Ġpretty Print Property . value )) ĊĠĠĠĠĠĠĠ Ġ} Ġui Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( main View . root ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Blueprint Ġsaved Ġas Ġ$ name ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ġ= Ġgreen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Later ( Duration . seconds ( 3 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove From Parent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }