// ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġ. ĠWil ber force ĠU w ad ie gw u . ĠAll ĠRights ĠReserved . Ċ Ċ package Ġcom . j ade byte . j ade player . main . common . utils Ċ Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . media . Thumbnail Utils Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . j ade byte . j ade player . main . common . data . Model Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util .* Ċ import Ġkotlin . math . min ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠWil ber force Ġon Ġ 1 6 / 0 4 / 2 0 1 9 Ġat Ġ 0 1 : 3 1 . Ċ Ġ*/ Ċ object ĠImage Utils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMerge s Ġbit maps ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠOnly Ġ 2 Ġand Ġ 4 Ġbit maps Ġare Ġsupported Ġfor Ġthe Ġinter im . ĊĠĠĠĠ Ġ* ĠFor Ġ 2 Ġbit maps , Ġthey 're Ġtriangle Ġc ropped Ġand Ġa Ġcoll age Ġof Ġthem Ġis Ġgenerated ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġ 4 Ġbit maps , Ġa Ġ 2 ĠX Ġ 2 Ġcoll age Ġof Ġthe Ġthem ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbit maps Ġthe Ġlist Ġof Ġbit maps Ġto Ġmerge Ġtogether ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Width Ġwidth Ġof Ġthe Ġmerged Ġbitmap ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Height Ġheight Ġof Ġthe Ġmerged Ġbitmap ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġmerged Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmerge ( ĊĠĠĠĠĠĠĠ Ġbit maps : ĠList < Bitmap >, Ġresult Width : ĠFloat , Ġresult Height : ĠFloat ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bit maps . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbit maps [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbg Bitmap Ġ= ĠBitmap . create Bitmap ( result Width . toInt (), Ġresult Height . toInt (), ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bg Bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġbit maps Count Ġ= Ġbit maps . size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bit maps Count Ġ< Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbit maps . take ( 2 ). forEach Indexed Ġ{ Ġindex , Ġbitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠThumb nail Utils . extract Thumbnail ( bitmap , Ġresult Width . toInt (), Ġresult Height . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtriangle Ġ= Ġtriangle Crop ( b , Ġindex Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( triangle , Ġ 0 F , Ġ 0 F , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Width Ġ= Ġresult Width . toInt () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Height Ġ= Ġresult Height . toInt () Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbit maps . take ( 4 ). forEach Indexed Ġ{ Ġindex , Ġbitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠThumb nail Utils . extract Thumbnail ( bitmap , Ġhalf Width , Ġhalf Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( index Ġ== Ġ 0 Ġ|| Ġindex Ġ== Ġ 2 ) Ġ 0 f Ġelse Ġresult Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġif Ġ( index Ġ< Ġ 2 ) Ġ 0 f Ġelse Ġresult Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( b , Ġleft , Ġtop , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbg Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget Ġthe Ġalbum Ġcover ĠUR i Ġfrom Ġthe Ġalbum ĠId ĊĠĠĠ Ġfun Ġget Album Art Uri ( album Id : ĠLong ): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Artwork Uri Ġ= ĠUri . parse (" content :// media / external / audio / album art ") ĊĠĠĠĠĠĠĠ Ġreturn ĠContent U ris . with App ended Id ( s Artwork Uri , Ġalbum Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġnecessary , Ġres izes Ġthe Ġimage Ġlocated Ġin Ġimage Path Ġand Ġthen Ġreturns Ġthe Ġpath Ġfor Ġthe Ġscaled ĊĠĠĠĠ Ġ* Ġimage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġno Ġres izing Ġis Ġneeded , Ġreturns Ġthe Ġpath Ġfor Ġthe Ġoriginal Ġimage . ĠĠ ĠRes is izes Ġan Ġimage Ġwith Ġgiven Ġpath ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Path Ġthe Ġfile Ġpath Ġof Ġthe Ġimage ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġthe Ġmax Ġatt ain able Ġwidth Ġof Ġthe Ġnew Ġresized Ġimage ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġthe Ġmax Ġatt ain able Ġheight Ġof Ġthe Ġnew Ġresized Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Path ĠThe Ġpath Ġto Ġsave Ġthe Ġresult ant Ġimage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSource : Ġhttps :// raw . githubusercontent . com / flutter / plugins / master / packages / image _ picker / android / src / main / java / io / flutter / plugins / image picker / Image Res izer . java ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresize Image IfNeeded ( ĊĠĠĠĠĠĠĠ Ġimage Path : ĠString , ĠmaxWidth : ĠDouble ?, ĠmaxHeight : ĠDouble ?, Ġimage Quality : ĠInt , ĊĠĠĠĠĠĠĠ Ġresult Path : ĠString ĊĠĠĠ Ġ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshould Scale Ġ= ĠmaxWidth Ġ!= Ġnull Ġ|| ĠmaxHeight Ġ!= Ġnull Ġ|| Ġimage Quality Ġ> Ġ- 1 Ġ&& Ġimage Quality Ġ< Ġ 1 0 1 ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! should Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage Path ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Image Ġ= Ġresized Image ( image Path , ĠmaxWidth , ĠmaxHeight , Ġimage Quality , Ġresult Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaled Image . path ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Could Ġ Ġnot Ġresize Ġimage Ġin Ġ$ image Path . ĠError Ġ= Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRes is izes Ġan Ġimage Ġwith Ġgiven Ġpath ĊĠĠĠĠ Ġ* Ġ@ param Ġpath Ġthe Ġfile Ġpath Ġof Ġthe Ġimage ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġthe Ġmax Ġatt ain able Ġwidth Ġof Ġthe Ġnew Ġresized Ġimage ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġthe Ġmax Ġatt ain able Ġheight Ġof Ġthe Ġnew Ġresized Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Path ĠThe Ġpath Ġto Ġsave Ġthe Ġresult ant Ġimage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠOriginal Ġsource : Ġhttps :// raw . githubusercontent . com / flutter / plugins / master / packages / image _ picker / android / src / main / java / io / flutter / plugins / image picker / Image Res izer . java ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġresized Image ( ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ ĠmaxWidth : ĠDouble ?, ĊĠĠĠĠĠĠĠ ĠmaxHeight : ĠDouble ?, ĊĠĠĠĠĠĠĠ Ġimage Quality : ĠInt , ĊĠĠĠĠĠĠĠ Ġresult Path : ĠString ĊĠĠĠ Ġ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġquality Ġ= Ġimage Quality ĊĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= ĠBitmap Factory . decode File ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Width Ġ= Ġbmp . width Ġ* Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Height Ġ= Ġbmp . height Ġ* Ġ 1 . 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( quality Ġ< Ġ 0 Ġ|| Ġquality Ġ> Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquality Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Max Width Ġ= ĠmaxWidth Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġhas Max Height Ġ= ĠmaxHeight Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġwidth : ĠDouble ? Ġ= Ġif Ġ( has Max Width ) Ġmin ( original Width , ĠmaxWidth !! ) Ġelse Ġoriginal Width ĊĠĠĠĠĠĠĠ Ġvar Ġheight : ĠDouble ? Ġ= Ġif Ġ( has Max Height ) Ġmin ( original Height , ĠmaxHeight !! ) Ġelse Ġoriginal Height ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Max Height Ġ&& Ġhas Max Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Down scale Width Ġ= Ġhas Max Width Ġ&& ĠmaxWidth !! Ġ< Ġoriginal Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Down scale Height Ġ= Ġhas Max Height Ġ&& ĠmaxHeight !! Ġ< Ġoriginal Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Down scale Ġ= Ġshould Down scale Width Ġ|| Ġshould Down scale Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Down scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown scaled Width Ġ= Ġheight !! Ġ/ Ġoriginal Height Ġ* Ġoriginal Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown scaled Height Ġ= Ġwidth !! Ġ/ Ġoriginal Width Ġ* Ġoriginal Height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Max Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdown scaled Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġdown scaled Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( height Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġdown scaled Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdown scaled Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Width Ġ< Ġoriginal Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdown scaled Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( original Height Ġ< Ġoriginal Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġdown scaled Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscaled B mp Ġ= ĠBitmap . create Scaled Bitmap ( bmp , Ġwidth !!. toInt (), Ġheight !!. toInt (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġsave As PNG Ġ= Ġbmp . has Alpha () ĊĠĠĠĠĠĠĠ Ġif Ġ( save As PNG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" compress ing Ġis Ġnot Ġsupported Ġfor Ġtype ĠPNG . ĠReturn ing Ġthe Ġimage Ġwith Ġoriginal Ġquality "); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscaled B mp . compress ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( save As PNG ) ĠBitmap . Compress Format . PNG Ġelse ĠBitmap . Compress Format . JPEG , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquality , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġimage File Ġ= ĠFile ( result Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! image File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage File . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage File . createNew File () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfile Output Ġ= ĠFileOutputStream ( image File ) ĊĠĠĠĠĠĠĠ Ġfile Output . write ( output Stream . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġfile Output . close () ĊĠĠĠĠĠĠĠ Ġreturn Ġimage File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetImage Path For Model ( model : ĠModel , Ġc : ĠContext ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠWeak Reference < Context >( c ). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ context . files Dir }/ images /${ model . java Class . name . toLowerCase ( Locale . ROOT ) }/${ model . id }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠC rops Ġa Ġtriangle Ġfrom Ġthe Ġbitmap ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc Ġthe Ġbitmap Ġto Ġcrop ĊĠĠĠĠ Ġ* Ġ@ param Ġis Left Ġdirection Ġof Ġthe Ġright - angle Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġc ropped Ġbitmap Ġin Ġa Ġtriangle Ġshape ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtriangle Crop ( src : ĠBitmap , Ġis Left : ĠBoolean ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠBitmap . create Bitmap ( src . width , Ġsrc . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( output ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . BLACK ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġif Ġ( is Left ) ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 F , Ġ 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( src . width . toFloat (), Ġ 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 0 F , Ġsrc . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 F , Ġsrc . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( src . width . toFloat (), Ġ 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( src . height . toFloat (), Ġsrc . height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath . fill Type Ġ= ĠPath . Fill Type . E VEN _ O DD ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , Ġ 0 F , Ġ 0 F , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bitmap From Vector Drawable ( c : ĠContext , Ġdrawable Id : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠWeak Reference < Context >( c ). get () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( context , Ġdrawable Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable !!. intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . intrinsic 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 ĊĠĠĠ Ġ} ĊĊ Ċ }