package Ġcom . example . c ult ura ver de . Classes ĊĊ Ċ // http :// gp mess . com / blog / 2 0 1 3 / 1 0 / 0 2 / com o - c argar - f otos - en - una - ap lic acion - android - des de - cam ara - gal eria - y - o tras - ap lic aciones / ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream ĊĊ Ċ class ĠPhoto Utils ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġgeneral Options : ĠBitmap Factory . Options ? Ġ= Ġnull ĊĠĠĠ Ġfun ĠgetImage ( uri : ĠUri ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġ` is `: ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` Ġ= ĠmContext . getContent Resolver (). open InputStream ( uri !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` !!. close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ġ// ĠTODO ĠAuto - generated Ġcatch Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgeneral Options Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġreturn Ġscale Image ( options , Ġuri , Ġ 3 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscale Image ( ĊĠĠĠĠĠĠĠ Ġoptions : ĠBitmap Factory . Options ?, Ġuri : ĠUri ?, ĊĠĠĠĠĠĠĠ Ġtarget Width : ĠInt ĊĠĠĠ Ġ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoptions Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġif Ġ( options Ġ== Ġnull ) Ġoptions Ġ= Ġgeneral Options ĊĠĠĠĠĠĠĠ Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġratio Width : ĠDouble Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width . toDouble () Ġ/ Ġoptions !!. out Width . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġratio Height : ĠDouble Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width . toDouble ()/ Ġoptions !!. out Height . toDouble () ĊĠĠĠĠĠĠĠ Ġvar Ġratio Ġ= ĠMath . min ( ratio Width , Ġratio Height ) ĊĠĠĠĠĠĠĠ Ġval Ġdst Width Ġ= ĠMath . round ( ratio Ġ* Ġoptions . out Width ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdst Height Ġ= ĠMath . round ( ratio Ġ* Ġoptions . out Height ). toInt () ĊĠĠĠĠĠĠĠ Ġratio Ġ= ĠMath . floor ( 1 . 0 Ġ/ Ġratio ) ĊĠĠĠĠĠĠĠ Ġvar Ġsample Ġ= Ġnearest 2 pow ( ratio . toInt ()) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġsample ĊĠĠĠĠĠĠĠ Ġoptions . in Purge able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` is `: ĠInputStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` Ġ= ĠmContext . getContent Resolver (). open InputStream ( uri !! ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ> Ġ 1 ) Ġbitmap Ġ= ĠBitmap . create Scaled Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap !! , Ġdst Width , Ġdst Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `. close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOut Of Memory Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar ĠmContext : ĠContext ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Temporary File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpart : ĠString ?, Ġext : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Context : ĠContext ĊĠĠĠĠĠĠĠ Ġ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath : ĠString Ġ= Ġmy Context . get External Cache Dir () !!. getAbsolutePath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġ"/ temp /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Dir Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! temp Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Dir . mkdir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile . create TempFile ( part , Ġext , Ġtemp Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnearest 2 pow ( value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( value Ġ== Ġ 0 ) Ġ 0 Ġelse Ġ( 3 2 Ġ- ĠInteger . numberOf Leading Z eros ( value Ġ- Ġ 1 )) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext ĊĠĠĠ Ġ} Ċ }