package Ġme . w anz io . pdf resolver . utils Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . pdf . Pdf Document Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġcom . it ext pdf . text .* Ċ import Ġcom . it ext pdf . text . pdf . Pdf Writer Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . lang . Exception Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Pdf Util " Ċ Ċ object ĠPdf Util Ġ{ ĊĊĠĠĠ Ġinterface ĠOn EventListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonSuccess ( filePath : ĠString ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Fail () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġcreate Pdf ( output Path : ĠString , Ġpath : ĠString ): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument () Ċ // ĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ output Path ${ File . separator } æĪĳ æĺ¯ PDF ä½ł çŁ¥éģĵ çļĦ _${ System Clock . uptime Millis ()}. pdf " Ċ // ĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( File ( filePath )) Ċ // ĠĠĠĠĠĠĠ ĠPdf Writer . getInstance ( document , Ġoutput ) Ċ // ĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® pdf èĥĮæĻ¯ Ċ // ĠĠĠĠĠĠĠ Ġdocument . open () Ċ // ĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . getInstance ( path ) Ċ // ĠĠĠĠĠĠĠ Ġimg . scale To Fit ( PageSize . A 4 . width , ĠPage Size . A 4 . height ) Ċ // ĠĠĠĠĠĠĠ Ġimg . set Absolute Position ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( PageSize . A 4 . width Ġ- Ġimg . scaled Width ) Ġ/ Ġ 2 , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( PageSize . A 4 . height Ġ- Ġimg . scaled Height ) Ġ/ Ġ 2 Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġdocument . add ( img ) Ċ // ĠĠĠĠĠĠĠ Ġdocument . close () Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠfilePath Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate PDF ( ĊĠĠĠĠĠĠĠ Ġoutput FilePath : ĠString , ĊĠĠĠĠĠĠĠ Ġicon : ĠByteArray ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfile Paths : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġlistener : ĠOn EventListener ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Paths . isEmpty ()) Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= ĠFile ("$ output FilePath ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! output Dir . exists () Ġ|| Ġ! output Dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" output FilePath Ġ å¿ħé¡» æĺ¯ æĸĩä»¶å¤¹ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument () ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ output FilePath ${ File . separator } temp _ pdf _${ System Clock . uptime Millis ()}. pdf " ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFileOutputStream ( File ( filePath )) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠPdf Writer . getInstance ( document , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġdocument . open () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Paths . forEach Ġ{ Ġimage Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠFile ( image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! img . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! add Page ( document , Ġimage Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Icon ( it , Ġwriter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Success ( filePath ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Pdf Use Pdf Document ( ĊĠĠĠĠĠĠĠ Ġoutput FilePath : ĠString , ĊĠĠĠĠĠĠĠ Ġicon : ĠByteArray ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfile Paths : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġlistener : ĠOn EventListener ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Paths . isEmpty ()) Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= ĠFile ("$ output FilePath ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! output Dir . exists () Ġ|| Ġ! output Dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" output FilePath Ġ å¿ħé¡» æĺ¯ æĸĩä»¶å¤¹ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢ ä½İ æĶ¯æĮģ åĪ° API Ġ 1 9 ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPdf Document () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Paths . forEach Ġ{ Ġimage Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠFile ( image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! img . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 0 . åĪĽå»º A 4 å¤§å°ı çļĦ æĸ° é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Info Ġ= ĠPdf Document . Page Info . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Size . A 4 . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Size . A 4 . height . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġdocument . start Page ( page Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage . canvas . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . èİ·åıĸ åĽ¾çīĩ å®½ / é«ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( image Path , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . è®¡ç®Ĺ ç¼© æĶ¾ æ¯Ķ ä¾ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å®½ é«ĺ æ¯Ķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradio Ġ= Ġoptions . out Width . toFloat () Ġ/ Ġoptions . out Height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa 4 Radio Ġ= ĠPage Size . A 4 . width Ġ/ ĠPage Size . A 4 . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ å®½ é«ĺ çŃī æ¯Ķ ä¾ĭ ç¼© æĶ¾ èĩ³ A 4 å¤§å°ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= ĠPage Size . A 4 . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġoptions . out Height Ġ* Ġ( PageSize . A 4 . width Ġ/ Ġoptions . out Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ å®½ åĽ¾ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( radio Ġ< Ġa 4 Radio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠPage Size . A 4 . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġheight Ġ* Ġradio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 . åĬłè½½ ç»ĺ åĪ¶ ( ä¸į éĻį ä½İ éĩĩ æł· çİĩ ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠBitmap Factory . decode File ( image Path , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate (( PageSize . A 4 . width Ġ- Ġwidth ) Ġ/ Ġ 2 , Ġ( PageSize . A 4 . height Ġ- Ġheight ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( width Ġ/ Ġoptions . out Width , Ġheight Ġ/ Ġoptions . out Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap ( image , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . çĶ» æ°´ åį° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Bitmap Ġ= ĠBitmap Factory . decode ByteArray ( it , Ġ 0 , Ġit . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Size . A 4 . width Ġ- Ġicon Bitmap . width Ġ- Ġ 1 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Size . A 4 . height Ġ- Ġicon Bitmap . height Ġ- Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap ( icon Bitmap , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . finish Page ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ output FilePath ${ File . separator } temp _ pdf _${ System Clock . uptime Millis ()}. pdf " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFileOutputStream ( File ( filePath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . writeTo ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Success ( filePath ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Fail () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Page ( document : ĠDocument , ĠfilePath : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! File ( filePath ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! document . new Page ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" ä¸įèĥ½ åĪĽå»º æĸ° é¡µ ï¼Į åı¯èĥ½ æĺ¯ åĨħåŃĺ ä¸į è¶³ ãĢģ åĽ¾çīĩ è¿ĩ å¤§ æĪĸèĢħ åºĵ æľ¬ èº« åİŁåĽł ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . add ( generate Image ( filePath )) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Image ( filePath : ĠString ): ĠImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠImage . getInstance ( filePath ) ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å®½ é«ĺ æ¯Ķ ĊĠĠĠĠĠĠĠ Ġval Ġradio Ġ= Ġimage . width Ġ/ Ġimage . height ĊĠĠĠĠĠĠĠ Ġval Ġa 4 Radio Ġ= ĠPage Size . A 4 . width Ġ/ ĠPage Size . A 4 . height ĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ å®½ é«ĺ çŃī æ¯Ķ ä¾ĭ ç¼© æĶ¾ èĩ³ A 4 å¤§å°ı ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= ĠPage Size . A 4 . width ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġimage . height Ġ* Ġ( PageSize . A 4 . width Ġ/ Ġimage . width ) ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ å®½ åĽ¾ ĊĠĠĠĠĠĠĠ Ġif Ġ( radio Ġ< Ġa 4 Radio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠPage Size . A 4 . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġheight Ġ* Ġradio ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġimage . scale Absolute ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġimage . set Absolute Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( PageSize . A 4 . width Ġ- Ġwidth ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( PageSize . A 4 . height Ġ- Ġheight ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġimage . alignment Ġ= ĠElement . ALIGN _ CENTER ĊĠĠĠĠĠĠĠ Ġreturn Ġimage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»Ļ å½ĵåīį é¡µ æ·»åĬł æ°´ åį° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġicon Ġbyte Ġarray Ġof Ġbitmap ĊĠĠĠĠ Ġ* Ġ@ param Ġwriter Ġpdf Ġwriter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Icon ( icon : ĠByteArray , Ġwriter : ĠPdf Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠImage . getInstance ( icon ) ĊĠĠĠĠĠĠĠ Ġicon . is Scale To Fit Line When Overflow Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġicon . set Absolute Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Size . A 4 . width Ġ- Ġicon . width Ġ- Ġ 1 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwriter . direct Content . add Image ( icon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Thumbnail ( ĊĠĠĠĠĠĠĠ Ġsource : ĠBitmap , Ġwidth : ĠInt , Ġheight : ĠInt , Ġoptions : ĠInt Ġ= ĠOPTIONS _ NONE ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale : ĠFloat ĊĠĠĠĠĠĠĠ Ġif Ġ( source . width Ġ< Ġsource . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġwidth Ġ/ Ġsource . width . toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġheight Ġ/ Ġsource . height . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtransform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix , Ġsource , Ġwidth , Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOPTIONS _ SCALE _ UP Ġor Ġoptions ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠOptions Ġused Ġinternally . Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠOPTIONS _ NONE Ġ= Ġ 0 x 0 ĊĠĠĠ Ġprivate Ġval ĠOPTIONS _ SCALE _ UP Ġ= Ġ 0 x 1 ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstant Ġused Ġto Ġindicate Ġwe Ġshould Ġre cycle Ġthe Ġinput Ġin ĊĠĠĠĠ Ġ* Ġ[. extract Thumbnail ] Ġunless Ġthe Ġoutput Ġis Ġthe Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠOPTIONS _ REC Y CLE _ INPUT Ġ= Ġ 0 x 2 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstant Ġused Ġto Ġindicate Ġthe Ġdimension Ġof Ġmini Ġthumbnail . ĊĠĠĠĠ Ġ* Ġ@ hide ĠOnly Ġused Ġby Ġmedia Ġframework Ġand Ġmedia Ġprovider Ġinternally . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠTARGET _ SIZE _ MIN I _ TH UMB NA IL Ġ= Ġ 3 2 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstant Ġused Ġto Ġindicate Ġthe Ġdimension Ġof Ġmicro Ġthumbnail . ĊĠĠĠĠ Ġ* Ġ@ hide ĠOnly Ġused Ġby Ġmedia Ġframework Ġand Ġmedia Ġprovider Ġinternally . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠTARGET _ SIZE _ MICRO _ TH UMB NA IL Ġ= Ġ 9 6 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTransform Ġsource ĠBitmap Ġto Ġtargeted Ġwidth Ġand Ġheight . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtransform ( ĊĠĠĠĠĠĠĠ Ġscal er : ĠMatrix ?, ĊĠĠĠĠĠĠĠ Ġsource : ĠBitmap , ĊĠĠĠĠĠĠĠ Ġtarget Width : ĠInt , ĊĠĠĠĠĠĠĠ Ġtarget Height : ĠInt , ĊĠĠĠĠĠĠĠ Ġoptions : ĠInt ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġscal er Ġ= Ġscal er ĊĠĠĠĠĠĠĠ Ġval Ġscale Up Ġ= Ġoptions Ġand ĠOPTIONS _ SCALE _ UP Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġre cycle Ġ= Ġoptions Ġand ĠOPTIONS _ REC Y CLE _ INPUT Ġ!= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġsource . width Ġ- Ġtarget Width ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġsource . height Ġ- Ġtarget Height ĊĠĠĠĠĠĠĠ Ġif Ġ(! scale Up Ġ&& Ġ( delta X Ġ< Ġ 0 Ġ|| Ġdelta Y Ġ< Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġthe Ġbitmap Ġis Ġsmaller , Ġat Ġleast Ġin Ġone Ġdimension , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġthe Ġtarget . Ġ ĠTransform Ġit Ġby Ġpl acing Ġas Ġmuch Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġas Ġpossible Ġinto Ġthe Ġtarget Ġand Ġleaving Ġthe Ġtop / bottom Ġor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġleft / right Ġ( or Ġboth ) Ġblack . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width , Ġtarget Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( b 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta X Half Ġ= ĠMath . max ( 0 , Ġdelta X Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Y Half Ġ= ĠMath . max ( 0 , Ġdelta Y Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta X Half , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Half , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta X Half Ġ+ ĠMath . min ( target Width , Ġsource . width ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Half Ġ+ ĠMath . min ( target Height , Ġsource . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst X Ġ= Ġ( target Width Ġ- Ġsrc . width ()) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Y Ġ= Ġ( target Height Ġ- Ġsrc . height ()) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdst X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ- Ġdst X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ- Ġdst Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Bitmap ( source , Ġsrc , Ġdst , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . set Bitmap ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Width F Ġ= Ġsource . width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Height F Ġ= Ġsource . height . toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Aspect Ġ= Ġbitmap Width F Ġ/ Ġbitmap Height F ĊĠĠĠĠĠĠĠ Ġval Ġview Aspect Ġ= Ġtarget Width . toFloat () Ġ/ Ġtarget Height ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Aspect Ġ> Ġview Aspect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġtarget Height Ġ/ Ġbitmap Height F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ< Ġ. 9 f Ġ|| Ġscale Ġ> Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscal er !!. set Scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscal er Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġtarget Width Ġ/ Ġbitmap Width F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ< Ġ. 9 f Ġ|| Ġscale Ġ> Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscal er !!. set Scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscal er Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġb 1 : ĠBitmap ĊĠĠĠĠĠĠĠ Ġif Ġ( scaler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġused Ġfor Ġmin ith umb Ġand Ġcrop , Ġso Ġwe Ġwant Ġto Ġfilter Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb 1 Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . width , Ġsource . height , Ġscal er , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb 1 Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġb 1 Ġ!= Ġsource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdx 1 Ġ= ĠMath . max ( 0 , Ġb 1 . width Ġ- Ġtarget Width ) ĊĠĠĠĠĠĠĠ Ġval Ġdy 1 Ġ= ĠMath . max ( 0 , Ġb 1 . height Ġ- Ġtarget Height ) ĊĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx 1 Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy 1 Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( b 2 Ġ!= Ġb 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ|| Ġb 1 Ġ!= Ġsource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb 1 . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġb 2 ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFile . delete Files ( delete Self : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif Ġ( exists () Ġ&& Ġis Directory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete Files () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( delete Self ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete () ĊĠĠĠ Ġ} Ċ }