package Ġnet . tor val d . aa Ċ Ċ import Ġnet . tor val d . aa . dem op layer . Ba AA Ċ import Ġorg . new d awn . slick .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠHow Ġit Ġworks : Ċ Ġ* Ċ Ġ* ĠDiv ide Ġthe Ġsingle Ġglyph Ġinto Ġ 2 Ġby Ġ 2 , Ġpre - calculate Ġthe Ġl umin osity Ġof Ġeach Ġcell Ġand Ġtry Ġto Ġfind Ġclosest Ġmatching Ċ Ġ* Ġone Ġfrom Ġthe Ġ 2 x 2 Ġpixels Ġin Ġinput Ġimage . Ċ Ġ* Ċ Ġ* ĠĠ ĠPre - calculation : Ċ Ġ* Ċ Ġ* ĠScan Ġeach Ġglyph Ġon Ġthe Ġsprites heet Ġprovided , Ġdivide Ġthe Ġsingle Ġglyph Ġinto Ġ 2 x 2 Ġand Ġcalculate Ġthe Ġl umin osity . Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġmin ja es ong Ġon Ġ 1 6 - 0 8 - 1 0 . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠFIXME : Ġlots Ġof Ġ' q 's Ġart ef act Ċ Ġ*/ Ċ @ Deprecated ( ĊĠĠĠĠĠĠĠ Ġ" I Ġwon 't Ġhack Ġwith Ġthis Ġone ; Ġuse ĠImage To A AS ub Glyph Ar b .", ĊĠĠĠĠĠĠĠ ĠReplace With (" net . tor val d . aa . Image To A AS ub Glyph Ar b "), ĊĠĠĠĠĠĠĠ ĠDeprec ation Level . WARNING Ċ ) Ġclass ĠImage To A AS ub Glyph 4 Ġ: ĠAsc ii Algo Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġw Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġh Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfont Sheet : ĠSprite Sheet ĊĠĠĠ Ġoverride Ġvar Ġfont W Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġvar Ġfont H Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġinverted Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġgamma Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġd ither Algo Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcolour Algo Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfont Range : ĠInt Range ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolour Map : ĠArray < Double > ĊĊĠĠĠ Ġfun Ġset Prop ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : ĠInt , Ġheight : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont : ĠSprite Sheet , Ġfont W : ĠInt , Ġfont H : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinverted : ĠBoolean , Ġgamma : ĠDouble , Ġd ither : ĠInt , Ġfull Code Page : ĠBoolean , Ġcolour Algo : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ= Ġwidth Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġh Ġ= Ġheight Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġthis . font W Ġ= Ġfont W ĊĠĠĠĠĠĠĠ Ġthis . font H Ġ= Ġfont H ĊĠĠĠĠĠĠĠ Ġthis . font Sheet Ġ= Ġfont ĊĠĠĠĠĠĠĠ Ġthis . inverted Ġ= Ġinverted ĊĠĠĠĠĠĠĠ Ġthis . gamma Ġ= Ġgamma ĊĠĠĠĠĠĠĠ Ġd ither Algo Ġ= Ġd ither ĊĠĠĠĠĠĠĠ Ġthis . colour Algo Ġ= Ġcolour Algo ĊĊĠĠĠĠĠĠĠ Ġif Ġ( full Code Page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Range Ġ= Ġ 1 .. 2 5 5 ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Range Ġ= Ġ 3 2 .. 1 2 6 ĊĊĠĠĠĠĠĠĠ Ġimage Buffer Ġ= ĠImage ( w , Ġh ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġre - invert Ġcolour map Ġso Ġthat Ġthe Ġcalculation Ġstay Ġnormal Ġwhen Ġinverted ĊĠĠĠĠĠĠĠ Ġcolour Map Ġ= ĠArray < Double >( Ba AA . colors . size , Ġ{ Ġ 0 . 0 Ġ}) ĊĊĠĠĠĠĠĠĠ Ġd ither Buffer Ġ= ĠArray < IntArray >( h , Ġ{ ĠInt Array ( w , Ġ{ Ġ 0 Ġ}) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Ba AA . colors . size Ġ== ĠBa AA . RANGE _ CG A ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inverted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBa AA . col c ga . forEach Indexed Ġ{ Ġi , Ġc Ġ-> Ġcolour Map [ i ] Ġ= ĠColor ( c , Ġc , Ġc ). get L uminance ( colour Algo , Ġgamma ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBa AA . col c ga Inv . forEach Indexed Ġ{ Ġi , Ġc Ġ-> Ġcolour Map [ i ] Ġ= ĠColor ( c , Ġc , Ġc ). get L uminance ( colour Algo , Ġgamma ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Ba AA . colors . size Ġ== ĠBa AA . RANGE _ EXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inverted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBa AA . hex ade ca Grey . forEach Indexed Ġ{ Ġi , Ġc Ġ-> Ġcolour Map [ i ] Ġ= ĠColor ( c , Ġc , Ġc ). get L uminance ( colour Algo , Ġgamma ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBa AA . hex ade ca Grey Inv . forEach Indexed Ġ{ Ġi , Ġc Ġ-> Ġcolour Map [ i ] Ġ= ĠColor ( c , Ġc , Ġc ). get L uminance ( colour Algo , Ġgamma ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Ba AA . colors . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inverted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolour Map [ 0 ] Ġ= ĠBa AA . getColor ( 0 ). get L uminance ( colour Algo , Ġgamma ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolour Map [ 1 ] Ġ= ĠBa AA . getColor ( 1 ). get L uminance ( colour Algo , Ġgamma ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolour Map [ 0 ] Ġ= ĠBa AA . getColor ( 1 ). get L uminance ( colour Algo , Ġgamma ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolour Map [ 1 ] Ġ= ĠBa AA . getColor ( 0 ). get L uminance ( colour Algo , Ġgamma ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Colour Ġmode Ġunknown ; Ġunexpected Ġcolour Ġrange : Ġ${ Ba AA . colors . size }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbrightness Map Ġ= ĠArrayList < Pair < Long , ĠChar >>() Ġ// ĠLong : Ġstored ĠTL - TR - BL - BR ĊĠĠĠ Ġprivate Ġval Ġglyph Col Map Ġ= ĠHashMap < Char , ĠLong >() ĊĠĠĠ Ġprivate Ġval Ġsame L um Start Indices Ġ= ĠHashMap < Long , ĠInt >() ĊĠĠĠ Ġprivate Ġval Ġsame L um End Indices Ġ= ĠHashMap < Long , ĠInt >() ĊĠĠĠ Ġprivate Ġval Ġl um Map Ġ= ĠArrayList < Long >() Ġ// ĠLong : Ġstored ĠTL - TR - BL - BR ; Ġstores Ġunique Ġelems , Ġregardless Ġof Ġposition ĊĠĠĠ Ġprivate Ġval Ġl um Map All Ġ= ĠArrayList < Int >() Ġ// Ġeach Ġelement Ġof ĠL umin osity , Ġunique Ġvalues Ġregardless Ġof Ġposition ĊĠĠĠ Ġprivate Ġval Ġl um Sort By Dim Ġ= ĠArray < ArrayList < Long >>( 4 , Ġ{ ĠArrayList () Ġ}) Ġ// Ġ[ position ][ l uma - glyph Ġpair ], Ġpos 0 : Ġtop - left , Ġstores Ġcombined Ġl um Ġ( aka Ġglyph ) ĊĠĠĠ Ġprivate Ġval Ġl um Sort By Dim Elem Ġ= ĠArray < ArrayList < Int >>( 4 , Ġ{ ĠArrayList () Ġ}) Ġ// Ġ[ position ][ l uma - glyph Ġpair ], Ġpos 0 : Ġtop - left , Ġstores Ġl um Ġfor Ġeach Ġdimension ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbrightness KD Tree : ĠK D Heap ified Tree Long ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Buffer : ĠImage ĊĊĠĠĠ Ġprivate Ġvar Ġpre calc Done Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġl um Min Ġ= Ġ 0 x 7 FFFF FFF ĊĠĠĠ Ġprivate Ġvar Ġl um Max Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġexclude Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'_ '. get Ascii (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// '- '. get Ascii (), Ġ// ĠTODO Ġremove ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'| '. get Ascii (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 , Ġ 9 , Ġ 1 0 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ(' Ġ' Ġ- Ġ'\ ') Ġ* Ġnumber Ġof Ġcolo urs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtotal Glyph Count Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġpre calc Font () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! pre calc Done ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Sheet W Ġ= Ġfont Sheet . width Ġ/ Ġfont W ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( colour Key Ġin Ġ 0 .. colour Map . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfont Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exclude . contains ( i )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglyph Ġ= Ġfont Sheet . getSub Image ( i Ġ% Ġfont Sheet W , Ġi Ġ/ Ġfont Sheet W ). copy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Glyph Count ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġglyph L um Top Left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġglyph L um Top Right Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġglyph L um Bottom Left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġglyph L um Bottom Right Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ== Ġ 0 Ġ|| Ġi Ġ== Ġ 3 2 ) Ġ&& Ġcolour Key Ġ== Ġ 0 ) Ġ{ Ġ// Ġexclude Ġ' Ġ' Ġif Ġin ĠASCII Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Left Ġ= Ġif Ġ(! inverted ) Ġ 0 Ġelse Ġglyph . height Ġ* Ġglyph . width Ġ* Ġcolour Map [ 0 ]. one To 2 5 6 () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Right Ġ= Ġglyph L um Top Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Left Ġ= Ġglyph L um Top Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Right Ġ= Ġglyph L um Top Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( colour Key Ġ>= Ġ 1 Ġ&& Ġi Ġ!= Ġ 0 Ġ&& Ġi Ġ!= Ġ 3 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġmore Ġweight ing Ġon Ġcluster ed Ġpixels ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtop - left Ġpart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fx Ġin Ġ 0 .. glyph . width Ġ/ Ġ 2 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fy Ġin Ġ 0 .. glyph . height Ġ/ Ġ 2 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixel Ġ= Ġglyph . getColor ( fx , Ġfy ). a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixel Ġ== Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ 0 ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ colour Key ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Left Ġ+= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbottom - left Ġpart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fx Ġin Ġ 0 .. glyph . width Ġ/ Ġ 2 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fy Ġin Ġglyph . height Ġ/ Ġ 2 .. glyph . height Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixel Ġ= Ġglyph . getColor ( fx , Ġfy ). a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixel Ġ== Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ 0 ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ colour Key ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Left Ġ+= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtop - right Ġpart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fx Ġin Ġglyph . width Ġ/ Ġ 2 .. glyph . width Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fy Ġin Ġ 0 .. glyph . height Ġ/ Ġ 2 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixel Ġ= Ġglyph . getColor ( fx , Ġfy ). a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixel Ġ== Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ 0 ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ colour Key ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Right Ġ+= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbottom - right Ġpart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fx Ġin Ġglyph . width Ġ/ Ġ 2 .. glyph . width Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fy Ġin Ġglyph . height Ġ/ Ġ 2 .. glyph . height Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpixel Ġ= Ġglyph . getColor ( fx , Ġfy ). a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixel Ġ== Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ 0 ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcolour Map [ colour Key ]. one To 2 5 6 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Right Ġ+= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( colour Key Ġ== Ġ 0 Ġ&& Ġ( i Ġ== Ġ 0 Ġ|| Ġi Ġ== Ġ 3 2 )) Ġ|| Ġ( colour Key Ġ>= Ġ 1 Ġ&& Ġi Ġ!= Ġ 0 Ġ&& Ġi Ġ!= Ġ 3 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl umin osity Packed : ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Left . to Long (). sh l ( 4 8 ) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Top Right . to Long (). sh l ( 3 2 ) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Left . to Long (). sh l ( 1 6 ) Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph L um Bottom Right . to Long () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrightness Map . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl umin osity Packed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( colour Key . sh l ( 8 ) Ġor Ġi . and ( 0 xFF )). to Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglyph Col Map . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( colour Key . sh l ( 8 ) Ġor Ġi . and ( 0 xFF )). to Char (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl umin osity Packed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrightness Map . sortBy Ġ{ Ġit . first Ġ} Ġ// Ġwill Ġbe Ġsorted Ġby ĠTL Ġthen ĠTR Ġthen ĠBL Ġthen ĠBR ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfill Ġl um Map X ( top )/ Y ( bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrightness Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lum Map . contains ( it . first )) Ġl um Map . add ( it . first ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lum Map All . contains ( it . first . get Top Left ())) Ġl um Map All . add ( it . first . get Top Left ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lum Map All . contains ( it . first . get Top Right ())) Ġl um Map All . add ( it . first . get Top Right ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lum Map All . contains ( it . first . get Bottom Left ())) Ġl um Map All . add ( it . first . get Bottom Left ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lum Map All . contains ( it . first . get Bottom Right ())) Ġl um Map All . add ( it . first . get Bottom Right ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. lum Sort By Dim . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. brightness Map . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Sort By Dim [ j ]. add ( brightness Map [ i ]. first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Sort By Dim Elem [ j ]. add ( brightness Map [ i ]. first . ush r ( 1 6 Ġ* Ġ( 3 Ġ- Ġj )). and ( 0 xFFFF ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsort Ġeverything Ġrequired ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dim Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Sort By Dim [ dim ]. sortBy Ġ{ Ġit . ush r ( 1 6 Ġ* Ġ( 3 Ġ- Ġdim )). and ( 0 xFFFF ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Sort By Dim Elem [ dim ]. sort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġl um Map All . sort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl um Map . sort () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġmin / max ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl um Min Ġ= Ġl um Map All . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl um Max Ġ= Ġl um Map All . last () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrightness Map . forEach Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Brightness Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . first . get Top Left ()} + ${ it . first . get Top Right ()} +" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . first . get Bottom Left ()} + ${ it . first . get Bottom Right () }\ t " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" glyph Ġ${ it . second . get Ascii (). to Char ()} Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" col Ġ${ it . second . get Colour Key () }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ[$ index ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Min : Ġ$ lum Min , ĠMax : Ġ$ lum Max ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġsame L um Start Indices Ġand ĠL um Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġdefine Ġstarting Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame L um Start Indices . put ( brightness Map . first (). first , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame L um End Indices . put ( brightness Map . last (). first , Ġbrightness Map . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. brightness Map . size Ġ- Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġ( this Ġ!= Ġnext ), Ġmark Ġ' this ' Ġas Ġendpoint , Ġ' next ' Ġas Ġstart Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis L um Ġ= Ġbrightness Map [ i ]. first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext L um Ġ= Ġbrightness Map [ i Ġ+ Ġ 1 ]. first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this L um Ġ!= Ġnext L um ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame L um End Indices . put ( this L um , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame L um Start Indices . put ( next L um , Ġi Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbuild Ġk - d Ġtree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrightness KD Tree Ġ= ĠK D Heap ified Tree Long ( brightness Map , Ġ 4 , ĠBa AA . no Approx imate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Max , ĠBa AA . max Search Depth ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre calc Done Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġd ither Buffer : ĠArray < IntArray > ĊĊĠĠĠ Ġval ĠF LOY D _ STE IN BER G Ġ= Ġ 1 ĊĠĠĠ Ġval ĠSI ERR A _ L ITE Ġ= Ġ 2 ĊĠĠĠ Ġval ĠSI ERR A _ 2 Ġ= Ġ 3 ĊĊĠĠĠ Ġprivate Ġval Ġd ither Hack Ġ= Ġ 2 ĊĊĠĠĠ Ġoverride Ġfun Ġto Ascii ( raw Image : ĠImage , Ġa af rame : ĠAA Frame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġscale - flag ged Ġ( getS ca led Copy ) Ġimage Ġto Ġthe Ġbuffer ĊĠĠĠĠĠĠĠ Ġimage Buffer . graphics . drawImage ( raw Image . getS ca led Copy ( w , Ġh ), Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfill Ġbuffer Ġ( scan Ġsize : ĠW * H Ġof Ġa af rame ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. h Ġ- Ġ 1 Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. w Ġ- Ġ 1 Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d ither Algo Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um TL Ġ= Ġbuffer Pixel Font L um ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um TR Ġ= Ġbuffer Pixel Font L um ( x Ġ+ Ġ 1 , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um BL Ġ= Ġbuffer Pixel Font L um ( x , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um BR Ġ= Ġbuffer Pixel Font L um ( x Ġ+ Ġ 1 , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq nt Ġ= Ġfind Nearest L um ( lum TL , Ġl um TR , Ġl um BL , Ġl um BR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpick Random Glyph By L um No Q nt ( q nt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa af rame . draw Buffer ( x . shr ( 1 ), Ġy . shr ( 1 ), Ġchar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x ĠĠĠ Ġ, Ġy ĠĠĠ Ġ, Ġbuffer Pixel Font L um ( x ĠĠĠ Ġ, Ġy ĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x ĠĠĠ Ġ, Ġy Ġ+ Ġ 1 , Ġbuffer Pixel Font L um ( x ĠĠĠ Ġ, Ġy Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 , Ġy ĠĠĠ Ġ, Ġbuffer Pixel Font L um ( x Ġ+ Ġ 1 , Ġy ĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 , Ġy Ġ+ Ġ 1 , Ġbuffer Pixel Font L um ( x Ġ+ Ġ 1 , Ġy Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġd ither ĊĠĠĠĠĠĠĠ Ġ// Ġref : Ġhttp :// www . t anner hell and . com / 4 6 6 0 / d ither ing - ele ven - algorithms - source - code / ĊĠĠĠĠĠĠĠ Ġif Ġ( d ither Algo Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscan Ġfor Ġd ither Buffer Ġthat Ġis Ġst rect hed Ġto ĠY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. h Ġ- Ġ 1 Ġstep Ġd ither Hack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. w Ġ- Ġ 1 Ġstep Ġd ither Hack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Pixel Ġ= Ġd ither Buffer . get ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Pixel Ġ= Ġfind Nearest ( old Pixel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x , Ġy , Ġnew Pixel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġold Pixel Ġ- Ġnew Pixel ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġd ither Ġglyph - wise Ġrather Ġthan Ġpixel - wise ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( h ax X Ġin Ġ 0 .. d ither Hack Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( h ax Y Ġin Ġ 0 .. d ither Hack Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġf loy d - stein berg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d ither Algo Ġ== ĠF LOY D _ STE IN BER G ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 7 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 3 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 5 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 1 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsi erra Ġlite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( d ither Algo Ġ== ĠSI ERR A _ L ITE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 2 ). shr ( 2 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 1 ). shr ( 2 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 1 ). shr ( 2 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsi erra - 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( d ither Algo Ġ== ĠSI ERR A _ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 4 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 2 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 2 Ġ+ Ġh ax X , Ġy ĠĠĠĠ Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 3 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ- Ġ 2 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ- Ġ 2 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 1 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ- Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 2 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x ĠĠĠĠ Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 3 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 1 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 2 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ither Buffer . set ( x Ġ+ Ġ 2 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y , Ġd ither Buffer . get ( x Ġ+ Ġ 2 Ġ+ Ġh ax X , Ġy Ġ+ Ġ 1 Ġ+ Ġh ax Y ) Ġ+ Ġ( error . times ( 1 ). shr ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown Ġd ither ing Ġalgorithm : Ġ$ d ither Algo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... and Ġdraw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. h Ġ- Ġ 1 Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. w Ġ- Ġ 1 Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um TL Ġ= Ġd ither Buffer . get ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um TR Ġ= Ġd ither Buffer . get ( x Ġ+ Ġ 1 , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um BL Ġ= Ġd ither Buffer . get ( x , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl um BR Ġ= Ġd ither Buffer . get ( x Ġ+ Ġ 1 , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpick Random Glyph By L um No Q nt ( find Nearest L um ( lum TL , Ġl um TR , Ġl um BL , Ġl um BR )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa af rame . draw Buffer ( x . shr ( 1 ), Ġy . shr ( 1 ), Ġchar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġclear Ġbuffer ĊĠĠĠĠĠĠĠ Ġimage Buffer . graphics . flush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠArray < IntArray >. set ( x : ĠInt , Ġy : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ>= Ġ 0 Ġ&& Ġy Ġ>= Ġ 0 Ġ&& Ġx Ġ< Ġw Ġ&& Ġy Ġ< Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ y ][ x ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠArray < IntArray >. get ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ>= Ġ 0 Ġ&& Ġy Ġ>= Ġ 0 Ġ&& Ġx Ġ< Ġw Ġ&& Ġy Ġ< Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis [ y ][ x ] ĊĠĠĠĠĠĠĠ Ġelse Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuffer Pixel Font L um ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl um Ġ= Ġ// Ġ[ 0 . 0 Ġ- Ġ 1 . 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Buffer . getColor ( x , Ġy ). get L uminance ( colour Algo , Ġgamma ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġl um Max Ġ- Ġl um Min ĊĠĠĠĠĠĠĠ Ġreturn Ġ( lum Min Ġ+ Ġdelta Ġ* Ġl um ). round Int () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġfont L um Ġ: Ġint Ġrange d Ġ 0 .. font L um Max ĊĠĠĠĠ Ġ* Ġ@ return Ġindexed Ġl um Ġ 0 .. font L um Max ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind Nearest L um ( lum Top Left : ĠInt , Ġl um Top Right : ĠInt , Ġl um Bottom Left : ĠInt , Ġl um Bottom Right : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl um Packed : ĠLong Ġ= Ġl um Top Left . and ( 0 xFFFF ). to Long (). sh l ( 4 8 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Top Right . and ( 0 xFFFF ). to Long (). sh l ( 3 2 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Bottom Left . and ( 0 xFFFF ). to Long (). sh l ( 1 6 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl um Bottom Right . and ( 0 xFFFF ). to Long () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbrightness KD Tree . find Nearest ( lum Packed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠPOS _ TL Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠPOS _ TR Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠPOS _ BL Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval ĠPOS _ BR Ġ= Ġ 3 ĊĊĠĠĠ Ġprivate Ġfun Ġfind Nearest ( lum : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġbinary Search Interval ( lum Map All , Ġl um ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( interval . first Ġ== Ġinterval . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġl um Map All [ interval . first ] ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompare Ġtwo Ġand Ġreturn Ġclosest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lum Ġ- Ġl um Map All [ interval . first ] Ġ< Ġl um Map All [ interval . second ] Ġ- Ġl um ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġl um Map All [ interval . first ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġl um Map All [ interval . second ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Nearest ( sort edList : ĠList < Int >, Ġelement : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġbinary Search Interval ( sort edList , Ġelement ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( interval . first Ġ== Ġinterval . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsorted List [ interval . first ] ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompare Ġtwo Ġand Ġreturn Ġclosest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ- Ġsorted List [ interval . first ] Ġ< Ġsorted List [ interval . second ] Ġ- Ġelement ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsorted List [ interval . first ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsorted List [ interval . second ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġe . g . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ 0 Ġ 1 Ġ 4 Ġ 5 Ġ 7 Ġ, Ġfind Ġ 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġwill Ġreturn Ġ( 1 , Ġ 2 ), Ġwhich Ġcorresponds Ġvalue Ġ( 1 , Ġ 4 ) Ġof Ġwhich Ġinput Ġvalue Ġ 3 Ġis Ġin Ġbetween . ĊĠĠĠĠ Ġ* Ġ@ return Ġpair Ġof Ġindex ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbinary Search Interval ( list : ĠList < Int >, Ġl um : ĠInt ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlow : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġhigh : ĠInt Ġ= Ġlist . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( low Ġ<= Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmid Val Ġ= Ġlist [ mid ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lum Ġ< Ġmid Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġmid Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( lum Ġ> Ġmid Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( mid , Ġmid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( Math . max ( high , Ġ 0 ), ĠMath . min ( low , Ġlist . size Ġ- Ġ 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpick Random Glyph By L um No Q nt ( font L um : ĠLong ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( font L um Ġ== Ġ 0 L Ġ&& Ġ! inverted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 x 2 0 . to Char () Ġ// Ġ' Ġ' Ġwith Ġcolour Ġindex Ġ' zero ' ĊĊĠĠĠĠĠĠĠ Ġ/* val Ġindex Start Ġ= Ġsame L um Start Indices [ font L um ] ĊĠĠĠĠĠĠĠ Ġval Ġindex End ĠĠ Ġ= Ġsame L um End Indices [ font L um ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Start Ġ== Ġnull Ġ&& Ġindex End Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" kotlin . Kotlin NullPointerException : Ġindex Start Ġand Ġindex End Ġis Ġnull .") ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( index Start Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" kotlin . Kotlin NullPointerException : Ġindex Start Ġis Ġnull .") ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( index End Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" kotlin . Kotlin NullPointerException : Ġindex End Ġis Ġnull .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Start Ġ== Ġnull Ġ|| Ġindex End Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" ĠĠĠ Ġfont L um : Ġ${ font L um . get Top Left ()} + ${ font L um . get Top Right ()} + ${ font L um . get Bottom Left ()} + ${ font L um . get Bottom Right () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Start Ġ!= Ġnull Ġ&& Ġindex End Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠRandom (). nextInt ( index End Ġ- Ġindex Start Ġ+ Ġ 1 ) Ġ+ Ġindex Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbrightness Map [ index ]. second ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException () */ ĊĠĠĠĠĠĠĠ Ġval Ġindex Start Ġ= Ġsame L um Start Indices [ font L um ] !! ĊĠĠĠĠĠĠĠ Ġval Ġindex End ĠĠ Ġ= Ġsame L um End Indices [ font L um ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠRandom (). nextInt ( index End Ġ- Ġindex Start Ġ+ Ġ 1 ) Ġ+ Ġindex Start ĊĠĠĠĠĠĠĠ Ġreturn Ġbrightness Map [ index ]. second ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠChar . get Colour Key () Ġ= Ġthis . toInt (). ush r ( 8 ). and ( 0 x 1 F ) ĊĠĠĠ Ġfun ĠChar . get Ascii () Ġ= Ġthis . toInt (). and ( 0 xFF ) ĊĠĠĠ Ġfun ĠDouble . one To 2 5 6 () Ġ= Ġthis . times ( 2 5 5 ). round Int () ĊĠĠĠ Ġfun ĠLong . to Short s () Ġ= ĠarrayOf ( this . get Top Left (), Ġthis . get Top Right (), Ġthis . get Bottom Left (), Ġthis . get Bottom Right ()) Ċ } Ċ Ċ fun Ġensure Boundary ( size : ĠInt , Ġindex : ĠInt ) Ġ= Ġif Ġ( index Ġ>= Ġsize ) Ġsize Ġ- Ġ 1 Ġelse Ġif Ġ( index Ġ< Ġ 0 ) Ġ 0 Ġelse Ġindex Ċ Ċ fun ĠLong . get Top Left () Ġ= Ġthis . ush r ( 4 8 ). toInt () Ġand Ġ 0 xFFFF Ċ fun ĠLong . get Top Right () Ġ= Ġthis . ush r ( 3 2 ). toInt () Ġand Ġ 0 xFFFF Ċ fun ĠLong . get Bottom Left () Ġ= Ġthis . ush r ( 1 6 ). toInt () Ġand Ġ 0 xFFFF Ċ fun ĠLong . get Bottom Right () Ġ= Ġthis . toInt () Ġand Ġ 0 xFFFF