/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠSe ang hay ĠY ath Ġ(@ se ang hay ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . se ang hay . studio . utils Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color Matrix Ċ import Ġandroid . graphics . Color Matrix Color Filter Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . media . Ex if Interface Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FILL _ CENTER Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FILL _ END Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FILL _ START Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FIT _ CENTER Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FIT _ END Ċ import Ġcom . se ang hay . studio . utils . Bitmap Processor . Crop Type . FIT _ START Ċ import Ġio . reactivex . Single Ċ import Ġjava . io . IOException Ċ Ċ class ĠBitmap Processor ( private Ġval Ġsource : ĠBitmap ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġwidth : ĠInt Ġ= Ġsource . width ĊĠĠĠ Ġprivate Ġval Ġheight : ĠInt Ġ= Ġsource . height ĊĊĠĠĠ Ġprivate Ġvar Ġscaled Width : ĠInt Ġ= Ġwidth ĊĠĠĠ Ġprivate Ġvar Ġscaled Height : ĠInt Ġ= Ġheight ĊĠĠĠ Ġprivate Ġvar Ġcrop Type : ĠC rop Type Ġ= ĠF IT _ CENTER ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġprocess ToFile ( path : ĠString ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquality ( quality : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcrop Type ( crop Type : ĠC rop Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . crop Type Ġ= Ġcrop Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcrop ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . scaled Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġthis . scaled Height Ġ= Ġheight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġproceed (): ĠSingle < Bitmap > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( proceed Sync ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġproceed Sync (): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . RED ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( scaled Width , Ġscaled Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( dst Rect : ĠRect , Ġfill : ĠBoolean ) Ġ= Ġwhen Ġ( crop Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ CENTER Ġ-> Ġfit Center Rect () Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ START Ġ-> Ġfit Start Rect () Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ END Ġ-> Ġfit End Rect () Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ CENTER Ġ-> Ġfill Center Rect () Ġto Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ START Ġ-> Ġfill Start Rect () Ġto Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ END Ġ-> Ġfill End Rect () Ġto Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! fill ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Matrix Ġ= ĠColor Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Matrix . set Sat uration (. 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Filter Ġ= ĠColor Matrix Color Filter ( color Matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Paint . alpha Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Paint . color Filter Ġ= Ġcolor Filter ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Ġ= ĠFast Blur . blur ( source , Ġ 1 4 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bg , Ġnull , Ġbackground Fill Rect (), Ġbg Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( source , Ġnull , Ġdst Rect , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbackground Fill Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= Ġfill Center Rect () ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 0 . 1 f ĊĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġ(( rect . right Ġ- Ġrect . left ) Ġ* Ġscale ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġ(( rect . bottom Ġ- Ġrect . top ) Ġ* Ġscale ). toInt () ĊĊĠĠĠĠĠĠĠ Ġrect . left Ġ-= Ġd ĊĠĠĠĠĠĠĠ Ġrect . right Ġ+= Ġd ĊĊĠĠĠĠĠĠĠ Ġrect . top Ġ-= Ġh ĊĠĠĠĠĠĠĠ Ġrect . bottom Ġ+= Ġh ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill End Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġ( scaled Width . toFloat () Ġ/ Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġscaled Height Ġ- Ġbottom ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( 0 , Ġtop , Ġscaled Width , Ġscaled Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Start Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġ( scaled Width . toFloat () Ġ/ Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( 0 , Ġtop , Ġscaled Width , Ġbottom Ġ+ Ġtop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Center Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġ( scaled Width . toFloat () Ġ/ Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ(( scaled Height Ġ- Ġbottom ) Ġ/ Ġ 2 f ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( 0 , Ġtop , Ġscaled Width , Ġbottom Ġ+ Ġtop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfit End Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ( scaled Height Ġ* Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġscaled Width Ġ- Ġright ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( left , Ġ 0 , Ġscaled Width , Ġscaled Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfit Center Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ( scaled Height Ġ* Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( scaled Width Ġ> Ġright ) Ġ(( scaled Width Ġ- Ġright ) Ġ/ Ġ 2 f ). toInt () ĊĠĠĠĠĠĠĠ Ġelse Ġ(( right Ġ- Ġscaled Width ) Ġ/ Ġ 2 f ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( left , Ġ 0 , Ġright Ġ+ Ġleft , Ġscaled Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfit Start Rect (): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ( scaled Height Ġ* Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( 0 , Ġ 0 , Ġright , Ġscaled Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠC rop Type Ġ{ ĊĠĠĠĠĠĠĠ ĠF IT _ CENTER , ĊĠĠĠĠĠĠĠ ĠF IT _ START , ĊĠĠĠĠĠĠĠ ĠF IT _ END , ĊĠĠĠĠĠĠĠ ĠF ILL _ CENTER , ĊĠĠĠĠĠĠĠ ĠF ILL _ START , ĊĠĠĠĠĠĠĠ ĠF ILL _ END ; ĊĊĠĠĠĠĠĠĠ Ġfun Ġkey (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ CENTER Ġ-> Ġ" fit - center " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ START Ġ-> Ġ" fit - start " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF IT _ END Ġ-> Ġ" fit - end " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ CENTER Ġ-> Ġ" fill - center " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ START Ġ-> Ġ" fill - start " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ILL _ END Ġ-> Ġ" fill - end " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom Key ( key : ĠString ): ĠC rop Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fit - center " Ġ-> ĠF IT _ CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fit - start " Ġ-> ĠF IT _ START ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fit - end " Ġ-> ĠF IT _ END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fill - center " Ġ-> ĠF ILL _ CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fill - start " Ġ-> ĠF ILL _ START ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fill - end " Ġ-> ĠF ILL _ END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Sync ( filePath : ĠString ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠBitmap Factory . decode File ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex if Ġ= ĠEx if Interface ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġex if . getAttribute Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . TAG _ OR IENTATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation In Degrees Ġ= Ġex if To Degrees ( orientation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rotation In Degrees Ġ!= Ġ 0 ) Ġmatrix . pre Rotate ( rotation In Degrees . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap . create Bitmap ( b , Ġ 0 , Ġ 0 , Ġb . width , Ġb . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġload ( filePath : ĠString ): ĠSingle < Bitmap > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( load Sync ( filePath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġex if To Degrees ( ex if Orientation : ĠInt ): ĠInt Ġ= Ġwhen Ġ( ex if Orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 Ġ-> Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ġ-> Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ġ-> Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ