package Ġnl . ent re co . g idd y app . lib picker . picker Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġnl . ent re co . g idd y app . lib core . HexString Ċ import Ġnl . ent re co . g idd y app . lib picker . Selected Image Ċ Ċ internal Ġclass ĠImage Crop per ( private Ġval Ġactivity : ĠActivity ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġc ropped Image : ĠSelected Image ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġfun Ġresize To ( bitmap : ĠBitmap , Ġwidth : ĠInt , Ġheight : ĠInt , Ġimage : ĠSelected Image ): ĠImage Crop per Ġ{ ĊĊĠĠĠĠĠĠĠ Ġextract Scale ( bitmap , Ġwidth Ġ* Ġ 1 F , Ġheight Ġ* Ġ 1 F , Ġimage ). also Ġ{ Ġresized Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Sw atch Ġ= ĠPalette . from ( res ized ). set Region ( 0 , Ġ 0 , Ġwidth , Ġheight Ġ/ Ġ 4 ). generate (). dom inant Sw atch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Color Ġ= ĠHex String . from ( top Sw atch ?. rgb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Sw atch Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPalette . from ( res ized ). set Region ( 0 , Ġ 3 Ġ* Ġheight Ġ/ Ġ 4 , Ġwidth , Ġheight ). generate (). dom inant Sw atch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Color Ġ= ĠHex String . from ( bottom Sw atch ?. rgb ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ropped Image Ġ= Ġimage . copy ( start Color Ġ= Ġstart Color , Ġend Color Ġ= Ġend Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Scale ( ĊĠĠĠĠĠĠĠ Ġbitmap : ĠBitmap , ĊĠĠĠĠĠĠĠ ĠmaxWidth : ĠFloat , ĊĠĠĠĠĠĠĠ ĠmaxHeight : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage : ĠSelected Image ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoriginal Width Ġ= Ġbitmap . width Ġ* Ġ 1 F ĊĠĠĠĠĠĠĠ Ġvar Ġoriginal Height Ġ= Ġbitmap . height Ġ* Ġ 1 F ĊĊĠĠĠĠĠĠĠ Ġval Ġshould Down Scale Width Ġ= ĠmaxWidth Ġ< Ġoriginal Width ĊĠĠĠĠĠĠĠ Ġval Ġshould Down Scale Height Ġ= ĠmaxHeight Ġ< Ġoriginal Height ĊĠĠĠĠĠĠĠ Ġval Ġshould Down Scale Ġ= Ġshould Down Scale Width Ġ|| Ġshould Down Scale Height ĊĊĠĠĠĠĠĠĠ Ġvar Ġscale Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( should Down Scale ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Width Ġ/ Ġ 2 Ġ< ĠmaxWidth Ġ|| Ġoriginal Height Ġ/ Ġ 2 Ġ< ĠmaxHeight ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Width Ġ/= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Height Ġ/= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThrow Ġerror Ġif Ġtoo Ġsmall Ġimage ... ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscaled Ġ= ĠBitmap . create Scaled Bitmap ( bitmap , ĠmaxWidth . toInt (), ĠmaxHeight . toInt (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġactivity . content Resolver . open OutputStream ( image . uri )?. use Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaled . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġscaled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbuild (): ĠSelected Image Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġc ropped Image Ġ?: Ġthrow ĠIllegalStateException (" Need Ġto Ġcrop Ġfirst Ġd ude ") ĊĠĠĠ Ġ} Ċ }