@ file : Jvm Name (" Bitmap Utils ") Ċ Ċ package Ġcom . extensions . graphics Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Base 6 4 Ċ import Ġcom . extensions . general . out As Bitmap Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . UUID Ċ Ċ inline Ġfun Ġ< R > ĠBitmap . use ( block Ġ:( Bitmap ) Ġ-> ĠR ) Ġ: R Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġblock ( this ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! is Re cyc led ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠBitmap . base 6 4 () Ġ: String Ġ{ ĊĠĠĠ Ġval ĠbyteArray OutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġthis . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , ĠbyteArray OutputStream ) ĊĠĠĠ Ġval ĠbyteArray Ġ= ĠbyteArray OutputStream . toByteArray () ĊĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( byteArray , ĠBase 6 4 . DEFAULT ) Ċ } Ċ Ċ fun ĠBitmap . resize ( new Width Ġ: Int , Ġnew Height Ġ: Int ) Ġ: Bitmap Ġ{ ĊĠĠĠ Ġval Ġwidth Ġ= Ġthis . width ĊĠĠĠ Ġval Ġheight Ġ= Ġthis . height ĊĠĠĠ Ġval Ġscale Width Ġ= Ġnew Width . toFloat () Ġ/ Ġwidth ĊĠĠĠ Ġval Ġscale Height Ġ= Ġnew Height . toFloat () Ġ/ Ġheight ĊĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠ Ġmatrix . post Scale ( scale Width , Ġscale Height ) ĊĠĠĠ Ġval Ġresized Bitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠ Ġthis , Ġ 0 , Ġ 0 , Ġwidth , Ġheight , Ġmatrix , Ġfalse ) ĊĠĠĠ Ġresized Bitmap . recycle () ĊĠĠĠ Ġreturn Ġresized Bitmap Ċ } Ċ Ċ fun ĠBitmap . to Round Corner ( radius Ġ: Float ) Ġ: Bitmap ? Ġ{ ĊĠĠĠ Ġval Ġwidth Ġ= Ġthis . width ĊĠĠĠ Ġval Ġheight Ġ= Ġthis . height ĊĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , Ġthis . config ) ĊĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠ Ġval Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĊĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġcanvas . draw Round Rect ( Rect F ( rect ), Ġradius , Ġradius , Ġpaint ) ĊĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠ Ġcanvas . draw Bitmap ( this , Ġrect , Ġrect , Ġpaint ) ĊĊĠĠĠ Ġthis . recycle () ĊĠĠĠ Ġreturn Ġbitmap Ċ } Ċ Ċ fun ĠContext . save Bitmap ToFile ( bitmap Ġ: Bitmap ) Ġ: File ? Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= Ġget Output Media File () ĊĠĠĠ Ġfile . output Stream (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfile Ċ } Ċ Ċ fun ĠFile . save Bitmap ToFile ( bitmap Ġ: Bitmap ) Ġ: File ? Ġ{ ĊĠĠĠ Ġthis . output Stream (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ private Ġfun ĠContext . getOutput Media File () Ġ: File Ġ{ ĊĠĠĠ Ġval Ġpic Name Ġ= ĠUUID . randomUUID (). toString (). replace ("- ". to Regex (), Ġ"") Ġ+ Ġ". jpg " ĊĠĠĠ Ġval Ġfolder Ġ= Ġthis . get External Files Dir ( null ) ĊĠĠĠ Ġif (! folder . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfolder . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠFile ( folder , Ġpic Name ) Ċ } Ċ Ċ fun Ġdrawable To Bitmap ( drawable Ġ: Drawable ) Ġ: Bitmap Ġ{ ĊĠĠĠ Ġif ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawable . bitmap ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġwidth Ġ= Ġdrawable . intrinsic Width ĊĠĠĠ Ġwidth Ġ= Ġif ( width Ġ> Ġ 0 ) Ġwidth Ġelse Ġ 1 ĊĠĠĠ Ġvar Ġheight Ġ= Ġdrawable . intrinsic Height ĊĠĠĠ Ġheight Ġ= Ġif ( height Ġ> Ġ 0 ) Ġheight Ġelse Ġ 1 ĊĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġcanvas . width , Ġcanvas . height ) ĊĠĠĠ Ġdrawable . draw ( canvas ) ĊĊĠĠĠ Ġreturn Ġbitmap Ċ } Ċ Ċ fun ĠContext . request Media Scanner ( url Ġ: String ) Ġ{ ĊĠĠĠ Ġval Ġmedia Scan Intent Ġ= ĠIntent ( Intent . ACTION _ MEDIA _ SCAN NER _ SCAN _ FILE ) ĊĠĠĠ Ġval Ġcontent Uri Ġ= ĠUri . from File ( File ( url )) ĊĠĠĠ Ġmedia Scan Intent . data Ġ= Ġcontent Uri ĊĠĠĠ Ġthis . send Broadcast ( media Scan Intent ) Ċ } Ċ Ċ fun Ġdownload Bitmap ( imageUrl Ġ: String ) Ġ: Bitmap ? Ġ{ ĊĠĠĠ Ġvar Ġbitmap Ġ: Bitmap ? Ġ= Ġnull ĊĠĠĠ Ġval Ġurl Ġ= ĠURL ( imageUrl ) ĊĠĠĠ Ġval Ġconn Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĊĠĠĠ Ġif ( conn . response Code Ġ== ĠHttp URLConnection . HTTP _ OK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġconn . inputStream . out As Bitmap () ĊĠĠĠ Ġ} ĊĠĠĠ Ġconn . disconnect () ĊĊĠĠĠ Ġreturn Ġbitmap Ċ } Ċ Ċ fun ĠBitmap . resize ( width Ġ: Int , Ġheight Ġ: Int , Ġmode Ġ: Resize Mode Ġ= ĠResize Mode . AUT OM AT IC , Ġis Exclude Alpha Ġ: Boolean Ġ= Ġfalse ) Ġ: Bitmap Ġ{ ĊĠĠĠ Ġvar Ġm Width Ġ= Ġwidth ĊĠĠĠ Ġvar Ġm Height Ġ= Ġheight ĊĠĠĠ Ġvar Ġm Mode Ġ= Ġmode ĊĠĠĠ Ġval Ġsource Width Ġ= Ġthis . width ĊĠĠĠ Ġval Ġsource Height Ġ= Ġthis . height ĊĊĠĠĠ Ġif ( mode Ġ== ĠResize Mode . AUT OM AT IC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Mode Ġ= Ġcalculate Resize Mode ( source Width , Ġsource Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif ( m Mode Ġ== ĠResize Mode . FIT _ TO _ WIDTH ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Height Ġ= Ġcalculate Height ( source Width , Ġsource Height , Ġwidth ) ĊĠĠĠ Ġ} Ġelse Ġif ( m Mode Ġ== ĠResize Mode . FIT _ TO _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Width Ġ= Ġcalculate Width ( source Width , Ġsource Height , Ġheight ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġconfig Ġ= Ġif ( is Exclude Alpha ) ĠBitmap . Config . RGB _ 5 6 5 Ġelse ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠ Ġreturn ĠBitmap . create Scaled Bitmap ( this , Ġm Width , Ġm Height , Ġtrue ). copy ( config , Ġtrue ) Ċ } Ċ Ċ private Ġfun Ġcalculate Resize Mode ( width Ġ: Int , Ġheight Ġ: Int ) Ġ: Resize Mode Ġ= ĊĠĠĠ Ġif ( Image Orientation . get Orientation ( width , Ġheight ) Ġ=== ĠImage Orientation . LAND SC APE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠResize Mode . FIT _ TO _ WIDTH ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠResize Mode . FIT _ TO _ HEIGHT ĊĠĠĠ Ġ} Ċ Ċ private Ġfun Ġcalculate Width ( original Width Ġ: Int , Ġoriginal Height Ġ: Int , Ġheight Ġ: Int ) Ġ: Int Ġ= ĠMath . ceil ( original Width Ġ/ Ġ( original Height . toDouble () Ġ/ Ġheight )). toInt () Ċ private Ġfun Ġcalculate Height ( original Width Ġ: Int , Ġoriginal Height Ġ: Int , Ġwidth Ġ: Int ) Ġ: Int Ġ= ĠMath . ceil ( original Height Ġ/ Ġ( original Width . toDouble () Ġ/ Ġwidth )). toInt () Ċ enum Ġclass ĠResize Mode Ġ{ ĊĠĠĠ ĠA UT OM AT IC , ĠF IT _ TO _ WIDTH , ĠF IT _ TO _ HEIGHT , ĠF IT _ EX ACT Ċ } Ċ Ċ private Ġenum Ġclass ĠImage Orientation Ġ{ ĊĠĠĠ ĠP OR TRA IT , ĠL AND SC APE ; ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Orientation ( width Ġ: Int , Ġheight Ġ: Int ) Ġ: Image Orientation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( width Ġ>= Ġheight ) ĠImage Orientation . LAND SC APE Ġelse ĠImage Orientation . POR TRA IT ĊĠĠĠ Ġ} Ċ }