package Ġcom . horizon . do od le Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . media . Ex if Interface Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ImageView . Scale Type Ċ import Ġcom . horizon . do od le . worker . Log Proxy Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠBitmap ĠDecoder Ċ Ġ*/ Ċ internal Ġobject ĠDecoder Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Decoder " ĊĊĠĠĠ Ġconst Ġval ĠNO _ CLIP Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġconst Ġval ĠMAT RIX Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠC ENTER Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġconst Ġval ĠC ENTER _ C ROP Ġ= Ġ 6 ĊĠĠĠ Ġconst Ġval ĠC ENTER _ INS IDE Ġ= Ġ 7 ĊĊĠĠĠ Ġfun Ġmap Scale Type ( scale Type : ĠScale Type ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( scale Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImageView . Scale Type . MATRIX Ġ-> ĠMAT RIX ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImageView . Scale Type . CENTER Ġ-> ĠC ENTER ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImageView . Scale Type . CENTER _ C ROP Ġ-> ĠC ENTER _ C ROP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠC ENTER _ INS IDE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġdecode ( source : ĠSource ?, Ġrequest : ĠRequest ?, Ġfrom Disk Cache : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source Ġ== Ġnull Ġ|| Ġrequest Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Scaled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġoptions . in Mutable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoptions . in Preferred Config Ġ= Ġrequest . config ĊĊĠĠĠĠĠĠĠ Ġvar Ġclip Type Ġ= Ġif Ġ( from Disk Cache ) ĠNO _ CLIP Ġelse Ġrequest . clip Type ĊĠĠĠĠĠĠĠ Ġvar Ġbitmap : ĠBitmap ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġorientation Ġ= ĠHeader Parser . UNKNOWN _ OR IENTATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrotated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! from Disk Cache Ġ&& ĠHeader Parser . possibly Ex if ( source . magic )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= Ġsource . orientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġorientation Ġinput Ġ[ 5 , 8 ] Ġmean Ġrotate Ġ 9 0 Ġor Ġ 2 7 0 Ġdegrees ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotated Ġ= Ġorientation Ġ>= ĠEx if Interface . OR IENTATION _ TRANS POSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! from Disk Cache Ġ&& Ġ( clip Type Ġ!= ĠNO _ CLIP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options . out Width Ġ<= Ġ 0 Ġ|| Ġoptions . out Height Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Type Ġ= ĠNO _ CLIP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd width Ġ= Ġoptions . out Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd height Ġ= Ġoptions . out Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġbitmap Ġrotated Ġ 9 0 Ġor Ġ 2 7 0 Ġdegrees , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġswap Ġview Ġwidth Ġand Ġheight Ġto Ġcalculate Ġtarget Ġsizes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv width Ġ= Ġif Ġ( rot ated ) Ġrequest . view Height Ġelse Ġrequest . view Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv height Ġ= Ġif Ġ( rot ated ) Ġrequest . view Width Ġelse Ġrequest . view Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( clip Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ CLIP Ġ-> Ġbitmap Ġ= Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAT RIX Ġ-> Ġbitmap Ġ= Ġif Ġ( d width Ġ> Ġv width Ġ|| Ġd height Ġ> Ġv height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġif Ġ( d width Ġ> Ġv width ) Ġv width Ġelse Ġd width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġif Ġ( d height Ġ> Ġv height ) Ġv height Ġelse Ġd height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . decode Region ( rect , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ENTER Ġ-> Ġif Ġ( d width Ġ> Ġv width Ġ|| Ġd height Ġ> Ġv height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d width Ġ> Ġv width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= ĠMath . round (( d width Ġ- Ġv width ) Ġ* Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= ĠMath . min ( left Ġ+ Ġv width , Ġd width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġd width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d height Ġ> Ġv height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠMath . round (( d height Ġ- Ġv height ) Ġ* Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠMath . min ( top Ġ+ Ġv height , Ġd height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġd height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġsource . decode Region ( rect , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ENTER _ C ROP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d width Ġ* Ġv height Ġ> Ġv width Ġ* Ġd height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d height Ġ> Ġv height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Scaled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Target Density Ġ= Ġv height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Density Ġ= Ġd height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d width Ġ> Ġv width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Scaled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Target Density Ġ= Ġv width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Density Ġ= Ġd width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . density Ġ= ĠBitmap . D ENS ITY _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbw Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbh Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġbw Ġ* Ġv height Ġ- Ġv width Ġ* Ġbh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġ( bw Ġ- Ġv width Ġ* Ġbh Ġ/ Ġv height . toFloat ()) Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Bitmap ( bitmap , ĠMath . round ( dx ), Ġ 0 , ĠMath . round ( bw Ġ- Ġ 2 Ġ* Ġdx ), Ġbh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( d Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġ( bh Ġ- Ġv height Ġ* Ġbw Ġ/ Ġv width . toFloat ()) Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Bitmap ( bitmap , Ġ 0 , ĠMath . round ( dy ), Ġbw , ĠMath . round ( bh Ġ- Ġ 2 Ġ* Ġdy )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġcase ï¼Į deal Ġwith Ġcenter Inside ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d width Ġ> Ġv width Ġ|| Ġd height Ġ> Ġv height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Scaled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d width Ġ* Ġv height Ġ> Ġv width Ġ* Ġd height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Target Density Ġ= Ġv width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Density Ġ= Ġd width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Target Density Ġ= Ġv height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Density Ġ= Ġd height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġsource . decode ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull Ġ&& Ġorientation Ġ>= ĠEx if Interface . OR IENTATION _ FLI P _ HORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġrotate Image Ex if ( bitmap , Ġorientation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Log Proxy . isDebug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Ġallocated :" Ġ+ ĠUtils . format Size ( Utils . getBytes Count ( bitmap ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġv :" Ġ+ Ġrequest . view Width Ġ+ Ġ" x " Ġ+ Ġrequest . view Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġd :" Ġ+ Ġd width Ġ+ Ġ" x " Ġ+ Ġd height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġbitmap :" Ġ+ Ġbitmap . width Ġ+ Ġ" x " Ġ+ Ġbitmap . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġsource :" Ġ+ Ġsource . java Class . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Decoder Ġimage Ġfailed . Ġ" Ġ+ Ġrequest . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteArray Pool . recycle Basic Array ( options . in Temp Storage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . density Ġ= ĠBitmap . D ENS ITY _ NONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġrotate Ġimage , ĠCopy Ġfrom ĠG lide ĊĠĠĠ Ġprivate Ġfun Ġrotate Image Ex if ( in Bitmap : ĠBitmap , Ġex if Orientation : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġinitialize Matrix For Rotation ( ex if Orientation , Ġmatrix ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Rect Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġin Bitmap . width . toFloat (), Ġin Bitmap . height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġmatrix . map Rect ( new Rect ) ĊĠĠĠĠĠĠĠ Ġmatrix . post Translate (- new Rect . left , Ġ- new Rect . top ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= ĠMath . round ( new Rect . width ()) ĊĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= ĠMath . round ( new Rect . height ()) ĊĠĠĠĠĠĠĠ Ġvar Ġconfig : ĠBitmap . Config ? Ġ= Ġin Bitmap . config ĊĠĠĠĠĠĠĠ Ġif Ġ( config Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBitmap . create Bitmap ( new Width , Ġnew Height , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . D IT HER _ FLAG Ġor ĠPaint . FILTER _ BITMAP _ FLAG ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( result ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( in Bitmap , Ġmatrix , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġcanvas . set Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Matrix For Rotation ( ex if Orientation : ĠInt , Ġmatrix : ĠMatrix ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ex if Orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ FLI P _ HORIZONTAL Ġ-> Ġmatrix . set Scale (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ġ-> Ġmatrix . set Rotate ( 1 8 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ FLI P _ VERTICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set Rotate ( 1 8 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ TRANS POSE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set Rotate ( 9 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 Ġ-> Ġmatrix . set Rotate ( 9 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ TRANS VERSE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set Rotate (- 9 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ġ-> Ġmatrix . set Rotate (- 9 0 f ) ĊĠĠĠĠĠĠĠ Ġ}// ĠDo Ġnothing . ĊĠĠĠ Ġ} Ċ } Ċ