/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 3 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . squareup . pic asso 3 Ċ Ċ import Ġandroid . graphics . Bitmap . create Bitmap Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . view . Gravity Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ FLI P _ HORIZONTAL Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ FLI P _ VERTICAL Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ ROT ATE _ 9 0 Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ TRANS POSE Ċ import Ġandroidx . ex if interface . media . Ex if Interface . OR IENTATION _ TRANS VERSE Ċ import Ġcom . squareup . pic asso 3 . Bitmap Utils . should Resize Ċ import Ġcom . squareup . pic asso 3 . RequestHandler . Result . Bitmap Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . sin Ċ Ċ internal Ġclass ĠMatrix Transformation ( private Ġval Ġdata : ĠRequest ) Ġ: ĠTransformation Ġ{ ĊĠ Ġoverride Ġfun Ġtransform ( source : ĠBitmap ): ĠBitmap Ġ{ ĊĠĠĠ Ġval Ġsource Bitmap Ġ= Ġsource . bitmap ĊĠĠĠ Ġval Ġtransformed Bitmap Ġ= Ġtransform Result ( data , Ġsource Bitmap , Ġsource . ex if Rotation ) ĊĠĠĠ Ġreturn ĠBitmap ( transformed Bitmap , Ġsource . loaded From , Ġsource . ex if Rotation ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġkey () Ġ= Ġ" matrix Transformation ()" ĊĊĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġ@ Jvm Name ("- transform Result ") ĊĠĠĠ Ġinternal Ġfun Ġtransform Result ( ĊĠĠĠĠĠ Ġdata : ĠRequest , ĊĠĠĠĠĠ Ġresult : Ġandroid . graphics . Bitmap , ĊĠĠĠĠĠ Ġex if Orientation : ĠInt ĊĠĠĠ Ġ): Ġandroid . graphics . Bitmap Ġ{ ĊĠĠĠĠĠ Ġval Ġin Width Ġ= Ġresult . width ĊĠĠĠĠĠ Ġval Ġin Height Ġ= Ġresult . height ĊĠĠĠĠĠ Ġval Ġonly Scale Down Ġ= Ġdata . only Scale Down ĊĊĠĠĠĠĠ Ġvar Ġdraw X Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar Ġdraw Y Ġ= Ġ 0 ĊĠĠĠĠĠ Ġvar Ġdraw Width Ġ= Ġin Width ĊĠĠĠĠĠ Ġvar Ġdraw Height Ġ= Ġin Height ĊĊĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĊĠĠĠĠĠ Ġif Ġ( data . needs Matrix Transform () Ġ|| Ġex if Orientation Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtarget Width Ġ= Ġdata . target Width ĊĠĠĠĠĠĠĠ Ġvar Ġtarget Height Ġ= Ġdata . target Height ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Rotation Ġ= Ġdata . rotation Degrees ĊĠĠĠĠĠĠĠ Ġif Ġ( target Rotation Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcos R Ġ= Ġcos ( Math . to Radians ( target Rotation . toDouble ())) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsin R Ġ= Ġsin ( Math . to Radians ( target Rotation . toDouble ())) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . has Rotation Pivot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set Rotate ( target Rotation , Ġdata . rotation Pivot X , Ġdata . rotation Pivot Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe calculate Ġdimensions Ġafter Ġrotation Ġaround Ġpivot Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 T Ġ= Ġdata . rotation Pivot X Ġ* Ġ( 1 . 0 Ġ- Ġcos R ) Ġ+ Ġdata . rotation Pivot Y Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 T Ġ= Ġdata . rotation Pivot Y Ġ* Ġ( 1 . 0 Ġ- Ġcos R ) Ġ- Ġdata . rotation Pivot X Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 T Ġ= Ġx 1 T Ġ+ Ġdata . target Width Ġ* Ġcos R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 T Ġ= Ġy 1 T Ġ+ Ġdata . target Width Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 3 T Ġ= Ġx 1 T Ġ+ Ġdata . target Width Ġ* Ġcos R Ġ- Ġdata . target Height Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 3 T Ġ= Ġy 1 T Ġ+ Ġdata . target Width Ġ* Ġsin R Ġ+ Ġdata . target Height Ġ* Ġcos R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 4 T Ġ= Ġx 1 T Ġ- Ġdata . target Height Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 4 T Ġ= Ġy 1 T Ġ+ Ġdata . target Height Ġ* Ġcos R ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax X Ġ= Ġmax ( x 4 T , Ġmax ( x 3 T , Ġmax ( x 1 T , Ġx 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin X Ġ= Ġmin ( x 4 T , Ġmin ( x 3 T , Ġmin ( x 1 T , Ġx 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Y Ġ= Ġmax ( y 4 T , Ġmax ( y 3 T , Ġmax ( y 1 T , Ġy 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Y Ġ= Ġmin ( y 4 T , Ġmin ( y 3 T , Ġmin ( y 1 T , Ġy 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ= Ġfloor ( max X Ġ- Ġmin X ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ= Ġfloor ( max Y Ġ- Ġmin Y ). toInt () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set Rotate ( target Rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe calculate Ġdimensions Ġafter Ġrotation Ġ( around Ġorigin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 T Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 T Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 T Ġ= Ġdata . target Width Ġ* Ġcos R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 T Ġ= Ġdata . target Width Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 3 T Ġ= Ġdata . target Width Ġ* Ġcos R Ġ- Ġdata . target Height Ġ* Ġsin R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 3 T Ġ= Ġdata . target Width Ġ* Ġsin R Ġ+ Ġdata . target Height Ġ* Ġcos R ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 4 T Ġ= Ġ-( data . target Height Ġ* Ġsin R ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 4 T Ġ= Ġdata . target Height Ġ* Ġcos R ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax X Ġ= Ġmax ( x 4 T , Ġmax ( x 3 T , Ġmax ( x 1 T , Ġx 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin X Ġ= Ġmin ( x 4 T , Ġmin ( x 3 T , Ġmin ( x 1 T , Ġx 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Y Ġ= Ġmax ( y 4 T , Ġmax ( y 3 T , Ġmax ( y 1 T , Ġy 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Y Ġ= Ġmin ( y 4 T , Ġmin ( y 3 T , Ġmin ( y 1 T , Ġy 2 T ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ= Ġfloor ( max X Ġ- Ġmin X ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ= Ġfloor ( max Y Ġ- Ġmin Y ). toInt () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠEX If Ġinterpretation Ġshould Ġbe Ġdone Ġbefore Ġcro pping Ġin Ġcase Ġthe Ġdimensions Ġneed Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġbe Ġre calculated ĊĠĠĠĠĠĠĠ Ġif Ġ( ex if Orientation Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġex if Rotation Ġ= Ġget Ex if Rotation ( ex if Orientation ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġex if Translation Ġ= Ġget Ex if Translation ( ex if Orientation ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex if Rotation Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . pre Rotate ( ex if Rotation . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex if Rotation Ġ== Ġ 9 0 Ġ|| Ġex if Rotation Ġ== Ġ 2 7 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe calculate Ġdimensions Ġafter Ġex if Ġrotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Height Ġ= Ġtarget Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ= Ġtarget Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ= Ġtmp Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex if Translation Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale ( ex if Translation . toFloat (), Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( data . center Crop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġaspect Ġratio Ġif Ġone Ġdimension Ġis Ġset Ġto Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ratio Ġ= Ġif Ġ( target Width Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ/ Ġin Width . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ/ Ġin Height . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ratio Ġ= Ġif Ġ( target Height Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ/ Ġin Height . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ/ Ġin Width . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġscale X : ĠFloat ĊĠĠĠĠĠĠĠĠĠ Ġval Ġscale Y : ĠFloat ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ratio Ġ> Ġheight Ratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġceil (( in Height Ġ* Ġ( height Ratio Ġ/ Ġwidth Ratio )). toDouble ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Y Ġ= Ġif Ġ( data . center Crop Gravity Ġand ĠGr avity . TOP Ġ== ĠGr avity . TOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( data . center Crop Gravity Ġand ĠGr avity . BOTTOM Ġ== ĠGr avity . BOTTOM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Height Ġ- Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( in Height Ġ- Ġnew Size ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Height Ġ= Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġwidth Ratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġtarget Height Ġ/ Ġdraw Height . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Ratio Ġ< Ġheight Ratio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġceil (( in Width Ġ* Ġ( width Ratio Ġ/ Ġheight Ratio )). toDouble ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw X Ġ= Ġif Ġ( data . center Crop Gravity Ġand ĠGr avity . LEFT Ġ== ĠGr avity . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( data . center Crop Gravity Ġand ĠGr avity . RIGHT Ġ== ĠGr avity . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Width Ġ- Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( in Width Ġ- Ġnew Size ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Width Ġ= Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġtarget Width Ġ/ Ġdraw Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġheight Ratio ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Width Ġ= Ġin Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġheight Ratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġscale Y ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Resize ( only Scale Down , Ġin Width , Ġin Height , Ġtarget Width , Ġtarget Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( scale X , Ġscale Y ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( data . center Inside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġaspect Ġratio Ġif Ġone Ġdimension Ġis Ġset Ġto Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Width Ġ!= Ġ 0 ) Ġtarget Width Ġ/ Ġin Width . toFloat () Ġelse Ġtarget Height Ġ/ Ġin Height . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Height Ġ!= Ġ 0 ) Ġtarget Height Ġ/ Ġin Height . toFloat () Ġelse Ġtarget Width Ġ/ Ġin Width . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġif Ġ( width Ratio Ġ< Ġheight Ratio ) Ġwidth Ratio Ġelse Ġheight Ratio ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Resize ( only Scale Down , Ġin Width , Ġin Height , Ġtarget Width , Ġtarget Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( target Width Ġ!= Ġ 0 Ġ|| Ġtarget Height Ġ!= Ġ 0 ) Ġ&& Ġ// ĊĠĠĠĠĠĠĠĠĠ Ġ( target Width Ġ!= Ġin Width Ġ|| Ġtarget Height Ġ!= Ġin Height ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġan Ġexplicit Ġtarget Ġsize Ġhas Ġbeen Ġspecified Ġand Ġthey Ġdo Ġnot Ġmatch Ġthe Ġresults Ġbounds , ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġpre - scale Ġthe Ġexisting Ġmatrix Ġappropriately . ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġaspect Ġratio Ġif Ġone Ġdimension Ġis Ġset Ġto Ġ 0 . ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsx Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Width Ġ!= Ġ 0 ) Ġtarget Width Ġ/ Ġin Width . toFloat () Ġelse Ġtarget Height Ġ/ Ġin Height . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Height Ġ!= Ġ 0 ) Ġtarget Height Ġ/ Ġin Height . toFloat () Ġelse Ġtarget Width Ġ/ Ġin Width . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Resize ( only Scale Down , Ġin Width , Ġin Height , Ġtarget Width , Ġtarget Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( sx , Ġsy ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġtransformed Result Ġ= Ġcreate Bitmap ( result , Ġdraw X , Ġdraw Y , Ġdraw Width , Ġdraw Height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠ Ġif Ġ( transformed Result Ġ!= Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . recycle () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġtransformed Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġ@ Jvm Name ("- get Ex if Rotation ") ĊĠĠĠ Ġinternal Ġfun Ġget Ex if Rotation ( orientation : ĠInt ) Ġ= ĊĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ ROT ATE _ 9 0 , ĠOR IENTATION _ TRANS POSE Ġ-> Ġ 9 0 ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ ROT ATE _ 1 8 0 , ĠOR IENTATION _ FLI P _ VERTICAL Ġ-> Ġ 1 8 0 ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ ROT ATE _ 2 7 0 , ĠOR IENTATION _ TRANS VERSE Ġ-> Ġ 2 7 0 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġ@ Jvm Name ("- get Ex if Translation ") ĊĠĠĠ Ġinternal Ġfun Ġget Ex if Translation ( orientation : ĠInt ) Ġ= ĊĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ FLI P _ HORIZONTAL , ĠOR IENTATION _ FLI P _ VERTICAL , ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ TRANS POSE , ĠOR IENTATION _ TRANS VERSE Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ