/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 . ĠExplo re Ġin ĠH MS . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 . h ms . reference app . hu aw e il ens . fr . presenter ĊĊ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Image Decoder Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Popup Window Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Parser Ċ import Ġcom . h ms . reference app . hu aw e il ens . R Ċ import Ġcom . h ms . reference app . hu aw e il ens . common . File Activity Ċ import Ġcom . h ms . reference app . hu aw e il ens . dsc . crop per . Crop Image Ċ import Ġcom . h ms . reference app . hu aw e il ens . fr . contract . Fr Preview Contract Ċ import Ġcom . h ms . reference app . hu aw e il ens . fr . model . Response Json Ċ import Ġcom . h ms . reference app . hu aw e il ens . fr . view . Fr Preview Ċ import Ġcom . h ms . reference app . hu aw e il ens . main . Menu Activity Ċ import Ġcom . hu awei . h ms . ml sdk . common . ML Frame Ċ import Ġcom . hu awei . h ms . ml sdk . fr . ML Form Recognition Analyzer Factory Ċ import Ġcom . hu awei . h ms . ml sdk . fr . ML Form Recognition Analyzer Setting Ċ import Ġorg . apache . poi . ss . user model . Row Ċ import Ġorg . apache . poi . x ss f . user model . XSS F Workbook Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList ĊĊ Ċ class ĠFr Preview Presenter (_ view : ĠFr Preview Contract . View ) Ġ: ĠFr Preview Contract . Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġview : ĠFr Preview Contract . View Ġ= Ġ_ view ĊĠĠĠ Ġval Ġtable Element List : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġcoordinates : ĠMutable List < Int > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġroot Path Ġ= ĠEnvironment . get External Storage Directory (). absolute Path Ġ+ Ġ"/ Hu awei - Lens /" ĊĠĠĠ Ġvar Ġexcel File : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġrow : ĠRow ? Ġ= Ġnull ĊĠĠĠ Ġvar ĠisEmpty : Boolean Ġ= Ġtrue ĊĊĊĠĠĠ Ġoverride Ġfun Ġinit Form Recognition ( image : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsetting Ġ= ĠML Form Recognition Analyzer Setting . Factory (). create () ĊĠĠĠĠĠĠĠ Ġval Ġanalyzer Ġ= ĠML Form Recognition Analyzer Factory . getInstance (). get Form Recognition Analyzer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetting ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġml Frame Ġ= ĠML Frame . from Bitmap ( image ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecognize Task Ġ= Ġanalyzer . async Analy se Frame ( ml Frame ) ĊĠĠĠĠĠĠĠ Ġrecognize Task . add On Success Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Json String : ĠString Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJson Parser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Json Ġ= Ġparser . parse ( m Json String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġgson . fromJson ( m Json , ĠResponse Json :: class . java ) ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . ret Code == - 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dismiss Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġresponse . table Content ?. tables ?. get ( 0 )?. table Body ?. indices !! ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Info Ġ= Ġresponse . table Content !!. tables ! ![ 0 ]. table Body ! ![ i ]. text Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoordinate Info Ġ= Ġresponse . table Content !!. tables ! ![ 0 ]. table Body ! ![ i ]. start Row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Info Ġ!= Ġnull Ġ&& Ġcoordinate Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Element List . add ( table Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinates . add ( coordinate Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Info Ġ!= Ġnull Ġ&& Ġtable Info . trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Element List . size Ġ> Ġ 0 Ġ&& Ġ! isEmpty Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Excel File ( table Element List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( analyzer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" 2 2 ", Ġ" analyzer Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dismiss Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( analyzer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" 2 2 3 3 3 ", Ġ" analyzer Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dialog () Ġ{ ĊĊĠĠĠĠĠĠ Ġval Ġm Inflater Ġ= ĠLayoutInflater . from ( view . getView Activity ()) ĊĠĠĠĠĠ Ġval Ġview w : ĠView Ġ= Ġm Inflater . inflate ( R . layout . fr _ info _ dialog , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog Ġ= ĠAlertDialog . Builder ( view . getView Activity ()). create () ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . setTitle (" Ġ ĠHu awei ĠLens ") ĊĠĠĠĠĠĠĠ Ġalert Dialog . setIcon ( R . mip map . hu awei logo ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . set Cancel able ( false ) ĊĊĊĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ POSITIVE , Ġ" OK " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dismiss Progress Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . setView ( view w ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠC rop Image . C ROP _ IMAGE _ ACTIVITY _ REQUEST _ CODE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC rop Image . getActivity Result ( data ) Ġ!= Ġnull ) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠC rop Image . getActivity Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Uri Ġ= Ġresult . uri ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbitmap : Bitmap Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . getView Activity (). content Resolver ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Decoder . create Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Decoder . decode Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . get Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . getView Activity (). content Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Image ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFr Preview . preview _ uri = result Uri ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠC rop Image . C ROP _ IMAGE _ ACTIVITY _ RESULT _ ERROR _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( view . getView Activity (), Ġ" Crop Ġfailed .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Excel File ( elements : ĠMutable List < String >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠSimpleDateFormat (" yyyy - dd - M - HH - mm - ss '. xlsx ' "). format ( Date ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġrow Num Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcol Num Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġworkbook Ġ= ĠX SS F Workbook () ĊĠĠĠĠĠĠĠ Ġval Ġsheet Ġ= Ġworkbook . create Sheet (" Hu awei - Lens ") ĊĠĠĠĠĠĠĠ Ġvar Ġrow Controller Ġ= Ġtrue ĊĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġelements . indices ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ>= Ġcoordinates . size Ġ- Ġ 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġrow ?. create Cell ( col Num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( table Element List [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Excel File ( fileName , Ġworkbook ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Num Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ= Ġsheet . create Row ( row Num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Controller Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coordinates [ i Ġ+ Ġ 1 ] Ġ> Ġcoordinates [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Controller Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġrow ?. create Cell ( col Num ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( table Element List [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol Num ++ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Excel File ( fileName : ĠString , Ġworkbook : ĠX SS F Workbook ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexcel File Ġ= ĠFile ( rootPath , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexcel File !!. set Executable ( true , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠFileOutputStream ( excel File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġworkbook . write ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworkbook . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . dismiss Progress Dialog () ĊĠĠĠĠĠĠĠ ĠMenu Activity . Send Image . ctrl = 2 ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( view . getView Activity (), ĠFile Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġview . getView Activity (). startActivity ( intent ) ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġrotate Bitmap ( bitmap : ĠBitmap ): ĠBitmap { ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĊĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 2 7 0 F ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscaled Bitmap Ġ= ĠBitmap . create Scaled Bitmap ( bitmap , Ġbitmap . width , Ġbitmap . height , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrotated Bitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaled Bitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaled Bitmap . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaled Bitmap . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrotated Bitmap ĊĠĠĠ Ġ} Ċ }