package Ġss _ n . common _ k tx Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġjava . io . IOException Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* Ġhttps :// qi ita . com / mas ah ide 3 1 8 / items / e 9 af bb bf 6 7 4 7 bb 0 9 1 f 6 3 Ġ åıĤçħ§ Ċ Ġ*/ Ċ class ĠBitmap Res izer ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġresize ( uri : ĠUri , Ġm Max Width : ĠInt , Ġm Max Height : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ? ĊĠĠĠĠĠĠĠ Ġval Ġdecode Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġdecode Options . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar ĠinputStream Ġ= Ġcontext . content Resolver . open InputStream ( uri ) ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( inputStream , Ġnull , Ġdecode Options ) ĊĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠĠĠ Ġval Ġactual Width Ġ= Ġdecode Options . out Width ĊĠĠĠĠĠĠĠ Ġval Ġactual Height Ġ= Ġdecode Options . out Height ĊĠĠĠĠĠĠĠ Ġval Ġdesired Width Ġ= Ġget Res ized Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Max Width , Ġm Max Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Width , Ġactual Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdesired Height Ġ= Ġget Res ized Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Max Height , Ġm Max Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Height , Ġactual Width ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdecode Options . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdecode Options . in Sample Size Ġ= Ġfind Best Sample Size ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġcontext . content Resolver . open InputStream ( uri ) ĊĠĠĠĠĠĠĠ Ġval Ġtemp Bitmap Ġ= ĠBitmap Factory . decode Stream ( inputStream , Ġnull , Ġdecode Options ) ĊĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( temp Bitmap Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Bitmap . width Ġ> Ġdesired Width Ġ|| Ġtemp Bitmap . height Ġ> Ġdesired Height ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Scaled Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Bitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width , Ġdesired Height , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Bitmap . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Bitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Res ized Dimension ( ĊĠĠĠĠĠĠĠ Ġmax Primary : ĠInt , ĊĠĠĠĠĠĠĠ Ġmax Secondary : ĠInt , ĊĠĠĠĠĠĠĠ Ġactual Primary : ĠInt , ĊĠĠĠĠĠĠĠ Ġactual Secondary : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Primary Ġ== Ġ 0 Ġ&& Ġmax Secondary Ġ== Ġ 0 ) Ġreturn Ġactual Primary ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Primary Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Secondary . toDouble () Ġ/ Ġactual Secondary . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( actual Primary Ġ* Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( max Secondary Ġ== Ġ 0 ) Ġreturn Ġmax Primary ĊĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġactual Secondary . toDouble () Ġ/ Ġactual Primary . toDouble () ĊĠĠĠĠĠĠĠ Ġvar Ġresized Ġ= Ġmax Primary ĊĠĠĠĠĠĠĠ Ġif Ġ( res ized Ġ* Ġratio Ġ< Ġmax Secondary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresized Ġ= Ġ( max Secondary Ġ/ Ġratio ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresized ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Best Sample Size ( ĊĠĠĠĠĠĠĠ Ġactual Width : ĠInt , ĊĠĠĠĠĠĠĠ Ġactual Height : ĠInt , ĊĠĠĠĠĠĠĠ Ġdesired Width : ĠInt , ĊĠĠĠĠĠĠĠ Ġdesired Height : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwr Ġ= Ġactual Width . toDouble () Ġ/ Ġdesired Width ĊĠĠĠĠĠĠĠ Ġval Ġhr Ġ= Ġactual Height . toDouble () Ġ/ Ġdesired Height ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġmin ( wr , Ġhr ) ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġwhile Ġ( n Ġ* Ġ 2 Ġ<= Ġratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ*= Ġ 2 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġn . toInt () ĊĠĠĠ Ġ} Ċ } Ċ