package Ġale k sey . vas il ie v Ċ Ċ import Ġjava . awt .* Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . lang . StringBuilder Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . pow Ċ Ċ /** Ġasci Img Converter . ĠWorks Ġin Ġtwo Ġmodes : Ġblack Ġ& Ġwhite Ġand Ġcolor ful . Ċ Ġ* Ġ ĠPresent s Ġimage Ġas Ġa Ġsequence Ġof Ġsame Ġsize Ġblocks Ġ( one Ġequals Ġto Ċ Ġ* Ġ Ġthe Ġbiggest Ġletter Ġin Ġfonts Ġwith Ġgiven Ġparameters ). ĠThen Ġa Ġphoto Ġis Ċ Ġ* Ġ Ġpresented Ġas Ġblack Ġand Ġwhite , Ġ 4 Ġareas Ġfor Ġeach Ġblock Ġare Ġcounted Ċ Ġ* Ġ Ġ( NW , ĠNE , ĠSW , ĠSE ). ĠAnd Ġdue Ġto Ġthe Ġdensity Ġof Ġblack Ġpixels Ġcomparing Ġto Ċ Ġ* Ġ Ġdefault Ġletters Ġ( in Ġfact , Ġvectors Ġthat Ġpresent Ġthem ), Ġnext Ġletter Ġis Ġchosen . Ċ Ġ* Ċ Ġ* Ġ Ġ@ author Ġ< a Ġhref =" mailto : ent hus i astic . program mer @ yandex . ru "> ÐĲ Ð» ÐµÐº Ñģ ÐµÐ¹ ĠÐĴ Ð°Ñģ Ð¸Ð»ÑĮ ÐµÐ² </ a > Ċ Ġ* Ġ Ġ@ version Ġ 1 . 0 Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ ĠTo Ġconvert Ġan Ġimage , Ġcheck Ġthe Ġcode Ġin ĠTests . Ċ Ġ* Ġ*/ Ċ Ċ class ĠImg 2 Ascii Converter ( font Name : ĠString , Ġfont Type : ĠInt , Ġsize : ĠInt , Ġprivate Ġval Ġcolored : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠCharacter Character istics ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt , Ġval Ġdesc ent : ĠInt , Ġval Ġcharacter : ĠString ) ĊĠĠĠ Ġdata Ġclass ĠPic 2 Vec ( val Ġbuffered Image : ĠBufferedImage , Ġval Ġnw : ĠInt , Ġval Ġne : ĠInt , Ġval Ġsw : ĠInt , Ġval Ġse : ĠInt ) ĊĊĠĠĠ Ġprivate Ġval Ġfirst Symbol Code Ġ= Ġ 3 2 ĊĠĠĠ Ġprivate Ġval Ġlast Symbol Code Ġ= Ġ 1 2 6 ĊĠĠĠ Ġprivate Ġval Ġas cc ii Symbols Ġ= ĊĠĠĠĠĠĠĠ ĠMutable List ( last Symbol Code Ġ- Ġfirst Symbol Code Ġ+ Ġ 1 ) Ġ{ Ġ( it Ġ+ Ġfirst Symbol Code ). to Char (). toString () Ġ} ĊĠĠĠ Ġprivate Ġval Ġas cc ii Symbols Character istics Ġ= Ġmutable ListOf < Character Character istics >() ĊĠĠĠ Ġprivate Ġval Ġfont Ġ= ĠFont ( font Name , Ġfont Type , Ġsize ) ĊĠĠĠ Ġprivate Ġval Ġcharacter Rectangle Ġ= Ġcalculate Character Rectangle () ĊĠĠĠ Ġprivate Ġval Ġimages 2 Vec s Ġ= Ġcalculate Images 2 Vec s () ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Images 2 Vec s (): ĠList < Pic 2 Vec > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Pic 2 Vec >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( symbol Index Ġin Ġas cc ii Symbols . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠBufferedImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Rectangle . first , Ġcharacter Rectangle . second , ĠBufferedImage . TYPE _ BYTE _ BINARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg 2 d Ġ= Ġimg . create Graphics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . paint Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . fillRect ( 0 , Ġ 0 , Ġcharacter Rectangle . first , Ġcharacter Rectangle . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . font Ġ= Ġfont ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . paint Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . draw String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas cc ii Symbols [ symbol Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( character Rectangle . first Ġ- Ġas cc ii Symbols Character istics [ symbol Index ]. width ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( as cc ii Symbols Character istics [ symbol Index ]. height Ġ+ Ġcharacter Rectangle . second ) Ġ/ Ġ 2 Ġ- Ġas cc ii Symbols Character istics [ symbol Index ]. desc ent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( count Value 2 Vec ( img )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount Value 2 Vec ( buffered Image : ĠBufferedImage ): ĠPic 2 Vec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġraster Ġ= Ġbuffered Image . raster ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġnw Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġne Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsw Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġse Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcharacter Rectangle . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġcharacter Rectangle . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraster . get Pixel ( i , Ġj , Ġbuffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcharacter Rectangle . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcharacter Rectangle . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcharacter Rectangle . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcharacter Rectangle . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcharacter Rectangle . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcharacter Rectangle . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcharacter Rectangle . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcharacter Rectangle . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPic 2 Vec ( buffered Image , Ġnw , Ġne , Ġsw , Ġse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Character Rectangle (): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠBufferedImage ( 1 , Ġ 1 , ĠBufferedImage . TYPE _ INT _ RGB ) ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Ġ= Ġimg . graphics Ġas ĠGraphics 2 D ĊĠĠĠĠĠĠĠ Ġgraphics . set Rendering Hint ( Rendering Hints . KEY _ TEXT _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ TEXT _ ANTI ALIAS _ ON ) ĊĠĠĠĠĠĠĠ Ġgraphics . font Ġ= Ġfont ĊĠĠĠĠĠĠĠ Ġval Ġfm Ġ= Ġgraphics . font Metrics . desc ent ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġgraphics . font Render Context ĊĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar ĠmaxHeight Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġas cc ii Symbols . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġfont . getString Bounds ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġceil ( bounds . width ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġceil ( bounds . height ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas cc ii Symbols Character istics . add ( Character Character istics ( width , Ġheight , Ġfm , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> ĠmaxWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Ġ> ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠmaxWidth Ġto ĠmaxHeight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Image ToString ( buffered Image : ĠBufferedImage ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbw Buffered Image Ġ= Ġimage To Black And White ( buffered Image ) ĊĠĠĠĠĠĠĠ Ġval Ġraster Ġ= Ġbw Buffered Image . raster ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbw Buffered Image . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbw Buffered Image . height ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent NW Ġ= Ġ 0 Ġto Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠ Ġvar Ġnw : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġne : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġsw : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġse : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġpret end ent Index : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġdistance : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġind Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġpret end ent Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnw Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġne Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġse Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= ĠFloat . MAX _ VALUE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcurrent NW . first Ġuntil Ġcurrent SE . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcurrent NW . second Ġuntil Ġcurrent SE . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraster . get Pixel ( i , Ġj , Ġbuffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġimages 2 Vec s . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsqrt Value Ġ= Ġ(( images 2 Vec s [ index ]. nw Ġ- Ġnw ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. ne Ġ- Ġne ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. sw Ġ- Ġsw ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. se Ġ- Ġse ). pow ( 2 f )). pow ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sqrt Value Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= Ġsqrt Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpret end ent Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpret end ent Ġ= Ġas cc ii Symbols Character istics [ pret end ent Index ]. character ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( pret end ent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ== Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ+ Ġcharacter Rectangle . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent NW . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcurrent SE . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent NW . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġwidth Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . second Ġ+ Ġcharacter Rectangle . second Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġ 0 Ġto Ġcurrent NW . second Ġ+ Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġcurrent SE . second Ġ+ Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġ 0 Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġind Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( current SE . first Ġ== Ġwidth ) Ġ&& Ġ( current SE . second Ġ== Ġheight )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ+ Ġcharacter Rectangle . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcurrent SE . first Ġ+ Ġcharacter Rectangle . first Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġwidth Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Image ( buffered Image : ĠBufferedImage ): ĠBufferedImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbw Buffered Image Ġ= Ġimage To Black And White ( buffered Image ) ĊĠĠĠĠĠĠĠ Ġval Ġcolored Raster Ġ= Ġbuffered Image . raster ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbw Buffered Image . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbw Buffered Image . height ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBufferedImage ( width , Ġheight , ĠBufferedImage . TYPE _ INT _ RGB ) ĊĠĠĠĠĠĠĠ Ġval Ġg 2 d Ġ= Ġresult . graphics Ġas ĠGraphics 2 D ĊĠĠĠĠĠĠĠ Ġg 2 d . create () ĊĠĠĠĠĠĠĠ Ġval Ġraster Ġ= Ġbw Buffered Image . raster ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġcolored Buffer Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent NW Ġ= Ġ 0 Ġto Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠ Ġval Ġcolor Sum Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġnw : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġne : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġsw : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġse : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġpret end ent : ĠBufferedImage ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġpret end ent Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdistance : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġind Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnw Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġne Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġse Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= ĠFloat . MAX _ VALUE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcurrent NW . first Ġuntil Ġcurrent SE . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcurrent NW . second Ġuntil Ġcurrent SE . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraster . get Pixel ( i , Ġj , Ġbuffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ< Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ< Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsw Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ> Ġcurrent SE . first Ġ/ Ġ 2 ) Ġ&& Ġ( j Ġ> Ġcurrent SE . second Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse Ġ+= Ġbuffer [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġimages 2 Vec s . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsqrt Value Ġ= Ġ(( images 2 Vec s [ index ]. nw Ġ- Ġnw ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. ne Ġ- Ġne ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. sw Ġ- Ġsw ). pow ( 2 f ) Ġ+ Ġ( images 2 Vec s [ index ]. se Ġ- Ġse ). pow ( 2 f )). pow ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sqrt Value Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= Ġsqrt Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpret end ent Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpret end ent Ġ= Ġimages 2 Vec s [ index ]. buffered Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( colored ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcurrent NW . first Ġuntil Ġcurrent SE . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcurrent NW . second Ġuntil Ġcurrent SE . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolored Raster . get Pixel ( i , Ġj , Ġcolored Buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Sum [ k ] Ġ= Ġcolor Sum [ k ] Ġ+ Ġcolored Buffer [ k ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Sum [ k ] Ġ= Ġcolor Sum [ k ] Ġ/ Ġ( character Rectangle . first Ġ* Ġcharacter Rectangle . second Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġletter Ġ= ĠBufferedImage ( character Rectangle . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Rectangle . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedImage . TYPE _ INT _ RGB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraphics Ġ= Ġletter . create Graphics () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . paint Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . fillRect ( 0 , Ġ 0 , Ġcharacter Rectangle . first , Ġcharacter Rectangle . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . font Ġ= Ġfont ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . paint Ġ= ĠColor ( color Sum [ 0 ], Ġcolor Sum [ 1 ], Ġcolor Sum [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . draw String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas cc ii Symbols [ pret end ent Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( character Rectangle . first Ġ- Ġas cc ii Symbols Character istics [ pret end ent Index ]. width ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( as cc ii Symbols Character istics [ pret end ent Index ]. height Ġ+ Ġcharacter Rectangle . second ) Ġ/ Ġ 2 Ġ- Ġas cc ii Symbols Character istics [ pret end ent Index ]. desc ent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . drawImage ( letter , Ġnull , Ġcurrent NW . first , Ġcurrent NW . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . drawImage ( pret end ent , Ġnull , Ġcurrent NW . first , Ġcurrent NW . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ+ Ġcharacter Rectangle . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent NW . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcurrent SE . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent NW . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġwidth Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . second Ġ+ Ġcharacter Rectangle . second Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġ 0 Ġto Ġcurrent NW . second Ġ+ Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġcurrent SE . second Ġ+ Ġcharacter Rectangle . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġ 0 Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcharacter Rectangle . first Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġind Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( current SE . first Ġ== Ġwidth ) Ġ&& Ġ( current SE . second Ġ== Ġheight )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current SE . first Ġ+ Ġcharacter Rectangle . first Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġcurrent SE . first Ġ+ Ġcharacter Rectangle . first Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NW Ġ= Ġcurrent NW . first Ġ+ Ġcharacter Rectangle . first Ġto Ġcurrent SE . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent SE Ġ= Ġwidth Ġto Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġg 2 d . dispose () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimage To Black And White ( buffered Image : ĠBufferedImage ): ĠBufferedImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBufferedImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Image . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Image . height , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedImage . TYPE _ BYTE _ BINARY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġgraphic Ġ= Ġresult . create Graphics () ĊĠĠĠĠĠĠĠ Ġgraphic . drawImage ( buffered Image , Ġ 0 , Ġ 0 , ĠColor . WHITE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġgraphic . dispose () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }