package Ġcom . yy fly . android . common . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap . Compress Format Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color Matrix Ċ import Ġandroid . graphics . Color Matrix Color Filter Ċ import Ġandroid . graphics . Linear Gradient Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff Color Filter Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . graphics . Shader Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . N ine Patch Drawable Ċ import Ġandroid . media . Ex if Interface Ċ import Ġandroid . os . Build Ċ import Ġandroid . rend erscript . Allocation Ċ import Ġandroid . rend erscript . Element Ċ import Ġandroid . rend erscript . Render Script Ċ import Ġandroid . rend erscript . Script Intr insic Blur Ċ import Ġandroid . support . annotation . Float Range Ċ import Ġandroid . support . annotation . Int Range Ċ import Ġandroid . view . View Ċ import Ġcom . yy fly . android . common . App Ċ Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . Buffered OutputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . FileDescriptor Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream ĊĊ Ċ /** Ċ Ġ* Ġ åĽ¾çīĩ çĽ¸åħ³ å·¥åħ· ç±» Ċ Ġ* Ċ Ġ* Ġ@ author Ġ: Ġyy fly Ġ/ Ġdeveloper @ yy fly . com Ċ Ġ* Ġ@ version Ġ: Ġ 1 . 0 Ċ Ġ*/ Ċ object ĠImage Utils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbitmap è½¬ byte Arr ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap Ġbitmap å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġformat Ġ æł¼å¼ı ĊĠĠĠĠ Ġ* Ġ@ return Ġ åŃĹèĬĤ æķ°ç»Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbitmap 2 Bytes ( bitmap : ĠBitmap ?, Ġformat : ĠCompress Format ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġbitmap . compress ( format , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠ Ġreturn Ġba os . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbyte Arr è½¬ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes Ġ åŃĹèĬĤ æķ°ç»Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbytes 2 Bitmap ( bytes : ĠByteArray ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bytes Ġ== Ġnull Ġ|| Ġbytes . size Ġ== Ġ 0 ) Ġnull Ġelse ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdrawable è½¬ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawable Ġdrawable å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdrawable 2 Bitmap ( drawable : ĠDrawable ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdrawable . bitmap ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( drawable Ġis ĠN ine Patch Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . get Intr insic Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . get Intr insic Height (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable . get Opacity () Ġ!= ĠPixel Format . OP A QUE ) ĠBitmap . Config . ARGB _ 8 8 8 8 Ġelse ĠBitmap . Config . RGB _ 5 6 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġdrawable . get Intr insic Width (), Ġdrawable . get Intr insic Height ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbitmap è½¬ drawable ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġres ĠĠĠ Ġresources å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap Ġbitmap å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ return Ġdrawable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbitmap 2 Drawable ( res : ĠResources , Ġbitmap : ĠBitmap ?): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bitmap Ġ== Ġnull ) Ġnull Ġelse ĠBitmap Drawable ( res , Ġbitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdrawable è½¬ byte Arr ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawable Ġdrawable å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġformat ĠĠ Ġ æł¼å¼ı ĊĠĠĠĠ Ġ* Ġ@ return Ġ åŃĹèĬĤ æķ°ç»Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdrawable 2 Bytes ( drawable : ĠDrawable ?, Ġformat : ĠCompress Format ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( drawable Ġ== Ġnull ) Ġnull Ġelse Ġbitmap 2 Bytes ( drawable 2 Bitmap ( drawable ), Ġformat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbyte Arr è½¬ drawable ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġres ĠĠ Ġresources å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes Ġ åŃĹèĬĤ æķ°ç»Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġdrawable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbytes 2 Drawable ( res : ĠResources ?, Ġbytes : ĠByteArray ): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( res Ġ== Ġnull ) Ġnull Ġelse Ġbitmap 2 Drawable ( res , Ġbytes 2 Bitmap ( bytes )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġview è½¬ Bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ è§ĨåĽ¾ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġview 2 Bitmap ( view : ĠView ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( view . width , Ġview . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġval Ġbg Drawable Ġ= Ġview . background ĊĠĠĠĠĠĠĠ Ġif Ġ( bg Drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Drawable . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¡ç®Ĺ éĩĩ æł· å¤§å°ı ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoptions ĠĠ Ġ éĢīé¡¹ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġ éĩĩ æł· å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalculate In Sample Size ( options : ĠBitmap Factory . Options , ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Ġ== Ġ 0 Ġ|| ĠmaxHeight Ġ== Ġ 0 ) Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġoptions . out Height ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġoptions . out Width ĊĠĠĠĠĠĠĠ Ġvar Ġin Sample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( height Ġ== ĠmaxHeight Ġ&& Ġwidth Ġ>= ĠmaxWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Sample Size Ġ= Ġin Sample Size Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġin Sample Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Ġæĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( file : ĠFile ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġ` is `: ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` Ġ= ĠBuffered InputStream ( FileInputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream (` is `) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Close Utils . close IO (` is `) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠĠĠĠĠ Ġæĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( file : ĠFile ?, ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġ` is `: ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` Ġ= ĠBuffered InputStream ( FileInputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Close Utils . close IO (` is `) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġæĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( filePath : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . isBlank ( filePath )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode File ( filePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġ Ġæĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( filePath : ĠString , ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . isBlank ( filePath )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Ġ è¾ĵåħ¥ æµģ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap (` is `: ĠInputStream ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` is ` Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream (` is `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis ĠĠĠĠĠĠĠ Ġ è¾ĵåħ¥ æµģ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap (` is `: ĠInputStream ?, ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` is ` Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream (` is `, Ġnull , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠ Ġæķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset Ġ åģı ç§» éĩı ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( data : ĠByteArray , Ġoffset : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . size Ġ== Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( data , Ġoffset , Ġdata . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠĠĠĠĠ Ġæķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset ĠĠĠ Ġ åģı ç§» éĩı ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( data : ĠByteArray , Ġoffset : ĠInt , ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . size Ġ== Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode ByteArray ( data , Ġoffset , Ġdata . size , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( data , Ġoffset , Ġdata . size , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġres Ġ èµĦæºĲ å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġ Ġ èµĦæºĲ id ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( res : ĠResources ?, Ġid : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( res Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Resource ( res , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġres ĠĠĠĠĠĠ Ġ èµĦæºĲ å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠĠĠĠĠĠĠ Ġ èµĦæºĲ id ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( res : ĠResources ?, Ġid : ĠInt , ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( res Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( res , Ġid , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Resource ( res , Ġid , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfd Ġæĸĩä»¶ æııè¿° ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( fd : ĠFile Descriptor ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fd Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode FileDescriptor ( fd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ bitmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfd ĠĠĠĠĠĠĠ Ġæĸĩä»¶ æııè¿° ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxWidth Ġ Ġ æľĢå¤§ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param ĠmaxHeight Ġ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bitmap ( fd : ĠFile Descriptor ?, ĠmaxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fd Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode FileDescriptor ( fd , Ġnull , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , ĠmaxWidth , ĠmaxHeight ) ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode FileDescriptor ( fd , Ġnull , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼© æĶ¾ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Width Ġ Ġ æĸ° å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Height Ġ æĸ° é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġscale ( src : ĠBitmap , Ġnew Width : ĠInt , Ġnew Height : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Scaled Bitmap ( src , Ġnew Width , Ġnew Height , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼© æĶ¾ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Width Ġ Ġ ç¼© æĶ¾ å®½åº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Height Ġ ç¼© æĶ¾ é«ĺåº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġscale ( src : ĠBitmap , Ġscale Width : ĠFloat , Ġscale Height : ĠFloat , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Scale ( scale Width , Ġscale Height ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( src , Ġ 0 , Ġ 0 , Ġsrc . width , Ġsrc . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è£ ģ åī ª åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠĠĠĠĠĠ Ġ å¼Ģå§ĭ åĿĲæłĩ x ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠĠĠĠĠĠ Ġ å¼Ģå§ĭ åĿĲæłĩ y ĊĠĠĠĠ Ġ* Ġ@ param Ġwidth ĠĠ Ġ è£ ģ åī ª å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġheight Ġ Ġ è£ ģ åī ª é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è£ ģ åī ª åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġclip ( src : ĠBitmap , Ġx : ĠInt , Ġy : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( src , Ġx , Ġy , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢ ¾ æĸ ľ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġk x ĠĠĠĠĠ Ġ åĢ ¾ æĸ ľ åĽł åŃĲ x ĊĠĠĠĠ Ġ* Ġ@ param Ġk y ĠĠĠĠĠ Ġ åĢ ¾ æĸ ľ åĽł åŃĲ y ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĢ ¾ æĸ ľ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġskew ( src : ĠBitmap , Ġk x : ĠFloat , Ġk y : ĠFloat , Ġre cycle : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġskew ( src , Ġk x , Ġk y , Ġ 0 f , Ġ 0 f , Ġre cycle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢ ¾ æĸ ľ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġk x ĠĠĠĠĠ Ġ åĢ ¾ æĸ ľ åĽł åŃĲ x ĊĠĠĠĠ Ġ* Ġ@ param Ġk y ĠĠĠĠĠ Ġ åĢ ¾ æĸ ľ åĽł åŃĲ y ĊĠĠĠĠ Ġ* Ġ@ param Ġpx ĠĠĠĠĠ Ġ å¹³ ç§» åĽł åŃĲ x ĊĠĠĠĠ Ġ* Ġ@ param Ġpy ĠĠĠĠĠ Ġ å¹³ ç§» åĽł åŃĲ y ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĢ ¾ æĸ ľ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġskew ( src : ĠBitmap , Ġk x : ĠFloat , Ġk y : ĠFloat , Ġpx : ĠFloat Ġ= Ġ 0 f , Ġpy : ĠFloat Ġ= Ġ 0 f , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Sk ew ( kx , Ġk y , Ġpx , Ġpy ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( src , Ġ 0 , Ġ 0 , Ġsrc . width , Ġsrc . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĹ ĭ è½¬ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġdegrees Ġ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġpx ĠĠĠĠĠ Ġ æĹ ĭ è½¬ çĤ¹ æ¨ ª åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġpy ĠĠĠĠĠ Ġ æĹ ĭ è½¬ çĤ¹ çº µ åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĹ ĭ è½¬ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġrotate ( src : ĠBitmap , Ġdegrees : ĠInt , Ġpx : ĠFloat , Ġpy : ĠFloat , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( degrees Ġ== Ġ 0 ) Ġreturn Ġsrc ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Rotate ( degrees . toFloat (), Ġpx , Ġpy ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( src , Ġ 0 , Ġ 0 , Ġsrc . width , Ġsrc . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĽ¾çīĩ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġæĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Rotate Degree ( filePath : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdegree Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex if Interface Ġ= ĠEx if Interface ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġex if Interface . getAttribute Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . TAG _ OR IENTATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 Ġ-> Ġdegree Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ġ-> Ġdegree Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ġ-> Ġdegree Ġ= Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdegree ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è½¬ ä¸º åľĨ å½¢ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åľĨ å½¢ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġto Round ( src : ĠBitmap , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġsrc . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġsrc . height ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= ĠMath . min ( width , Ġheight ) Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( width , Ġheight , Ġsrc . config ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcanvas . draw ARGB ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle (( width Ġshr Ġ 1 ). toFloat (), Ġ( height Ġshr Ġ 1 ). toFloat (), Ġradius . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , Ġrect , Ġrect , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è½¬ ä¸º åľĨ è§Ĵ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġradius Ġ Ġ åľĨ è§Ĵ çļĦ åº¦ æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åľĨ è§Ĵ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġto Round Corner ( src : ĠBitmap ?, Ġradius : ĠFloat , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġsrc ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġsrc . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġsrc . height ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( width , Ġheight , Ġsrc . config ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( Rect F ( rect ), Ġradius , Ġradius , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , Ġrect , Ġrect , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¿«éĢŁ æ¨¡ ç³ Ĭ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åħĪ ç¼© å°ı åİŁ åĽ¾ ï¼Į å¯¹ å°ı åĽ¾ è¿Ľè¡Į æ¨¡ ç³ Ĭ ï¼Į åĨį æĶ¾ å¤§ åĽŀ åİŁ åħĪ å° º å¯ ¸ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġscale ĠĠ Ġ ç¼© æĶ¾ æ¯Ķ ä¾ĭ ( 0 ... 1 ) ĊĠĠĠĠ Ġ* Ġ@ param Ġradius Ġ Ġæ¨¡ ç³ Ĭ åįĬ å¾Ħ ( 0 ... 2 5 ) ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġæ¨¡ ç³ Ĭ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Range ") ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġfast Blur ( src : ĠBitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 , Ġfrom Inclusive Ġ= Ġfalse ) Ġscale : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 2 5 . 0 , Ġfrom Inclusive Ġ= Ġfalse ) Ġradius : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġsrc . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġsrc . height ĊĠĠĠĠĠĠĠ Ġval Ġscale Width Ġ= Ġ( width Ġ* Ġscale Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġscale Height Ġ= Ġ( height Ġ* Ġscale Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Width Ġ== Ġ 0 Ġ|| Ġscale Height Ġ== Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġscale Bitmap : ĠBitmap ? Ġ= ĠBitmap . create Scaled Bitmap ( src , Ġscale Width , Ġscale Height , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . FILTER _ BITMAP _ FLAG Ġor ĠPaint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas () ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠPort er D uff Color Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . TRANSP ARENT , ĠPort er D uff . Mode . SRC _ AT OP ) ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġcanvas . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( scale Bitmap !! , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Bitmap Ġ= Ġrender Script Blur ( App . context , Ġscale Bitmap , Ġradius ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Bitmap Ġ= Ġstack Blur ( scale Bitmap , Ġradius . toInt (), Ġre cycle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ== Ġ 1 f ) Ġreturn Ġscale Bitmap ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Scaled Bitmap ( scale Bitmap , Ġwidth , Ġheight , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Bitmap Ġ!= Ġnull Ġ&& Ġ! scale Bitmap . is Re cyc led ) Ġscale Bitmap . recycle () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrender Script æ¨¡ ç³ Ĭ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAPI å¤§äºİ 1 7 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġä¸Ĭ ä¸ĭ æĸĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġradius Ġ Ġæ¨¡ ç³ Ĭ åįĬ å¾Ħ ( 0 ... 2 5 ) ĊĠĠĠĠ Ġ* Ġ@ return Ġæ¨¡ ç³ Ĭ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) ĊĠĠĠ Ġfun Ġrender Script Blur ( context : ĠContext , Ġsrc : ĠBitmap , Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 2 5 . 0 , Ġfrom Inclusive Ġ= Ġfalse ) Ġradius : ĠFloat ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġrs : ĠRender Script ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs Ġ= ĠRender Script . create ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs !!. message Handler Ġ= ĠRender Script . RS MessageHandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠAl location . createFrom Bitmap ( rs , Ġsrc , ĠAl location . Mip map Control . MIP MAP _ NONE , ĠAl location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. USAGE _ SCRIPT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠAl location . create Typed ( rs , Ġinput . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblur Script Ġ= ĠScript Intr insic Blur . create ( rs , ĠElement . U 8 _ 4 ( rs )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblur Script . setInput ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblur Script . set Radius ( radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblur Script . forEach ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . copy To ( src ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsrc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġstack æ¨¡ ç³ Ĭ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġradius Ġ Ġæ¨¡ ç³ Ĭ åįĬ å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġstack æ¨¡ ç³ Ĭ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstack Blur ( src : ĠBitmap , Ġradius : ĠInt , Ġre cycle : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret : ĠBitmap ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġsrc ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġsrc . copy ( src . config , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( radius Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġret . width ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġret . height ĊĊĠĠĠĠĠĠĠ Ġval Ġpix Ġ= ĠInt Array ( w Ġ* Ġh ) ĊĠĠĠĠĠĠĠ Ġret . get Pixels ( pix , Ġ 0 , Ġw , Ġ 0 , Ġ 0 , Ġw , Ġh ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= Ġw Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġhm Ġ= Ġh Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġwh Ġ= Ġw Ġ* Ġh ĊĠĠĠĠĠĠĠ Ġval Ġdiv Ġ= Ġradius Ġ+ Ġradius Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠInt Array ( wh ) ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= ĠInt Array ( wh ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠInt Array ( wh ) ĊĠĠĠĠĠĠĠ Ġvar Ġr sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġg sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġb sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġx : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġy : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġp : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġy p : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġy i : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġy w : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġv min Ġ= ĠInt Array ( Math . max ( w , Ġh )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġdiv sum Ġ= Ġdiv Ġ+ Ġ 1 Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġdiv sum Ġ*= Ġdiv sum ĊĠĠĠĠĠĠĠ Ġval Ġdv Ġ= ĠInt Array ( 2 5 6 Ġ* Ġdiv sum ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġ 2 5 6 Ġ* Ġdiv sum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdv [ i ] Ġ= Ġi Ġ/ Ġdiv sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġy i Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġy w Ġ= Ġy i ĊĊĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠArray ( div ) Ġ{ ĠInt Array ( 3 ) Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġstack pointer : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġstack start : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġs ir : ĠInt Array ĊĠĠĠĠĠĠĠ Ġvar Ġr bs : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġr 1 Ġ= Ġradius Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġrout sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġg out sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġbout sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġr in sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġg in sum : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġbin sum : ĠInt ĊĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( y Ġ< Ġh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ= Ġb sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ= Ġg sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ= Ġr sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ= Ġbout sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ= Ġg out sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ= Ġrout sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ= Ġbin sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ= Ġg in sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġ- radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= Ġradius ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ= Ġpix [ yi Ġ+ ĠMath . min ( wm , ĠMath . max ( i , Ġ 0 ))] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ i Ġ+ Ġradius ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 0 ] Ġ= Ġp Ġand Ġ 0 xff 0 0 0 0 Ġshr Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 1 ] Ġ= Ġp Ġand Ġ 0 x 0 0 ff 0 0 Ġshr Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 2 ] Ġ= Ġp Ġand Ġ 0 x 0 0 0 0 ff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr bs Ġ= Ġr 1 Ġ- ĠMath . abs ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ+= Ġs ir [ 0 ] Ġ* Ġr bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ+= Ġs ir [ 1 ] Ġ* Ġr bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ+= Ġs ir [ 2 ] Ġ* Ġr bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ+= Ġs ir [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ+= Ġs ir [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack pointer Ġ= Ġradius ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( x Ġ< Ġw ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr [ yi ] Ġ= Ġdv [ r sum ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg [ yi ] Ġ= Ġdv [ g sum ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ yi ] Ġ= Ġdv [ b sum ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ-= Ġrout sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ-= Ġg out sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ-= Ġbout sum ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack start Ġ= Ġstack pointer Ġ- Ġradius Ġ+ Ġdiv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ stack start Ġ% Ġdiv ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ-= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ-= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ-= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv min [ x ] Ġ= ĠMath . min ( x Ġ+ Ġradius Ġ+ Ġ 1 , Ġwm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ= Ġpix [ yw Ġ+ Ġv min [ x ]] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 0 ] Ġ= Ġp Ġand Ġ 0 xff 0 0 0 0 Ġshr Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 1 ] Ġ= Ġp Ġand Ġ 0 x 0 0 ff 0 0 Ġshr Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 2 ] Ġ= Ġp Ġand Ġ 0 x 0 0 0 0 ff ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ+= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ+= Ġr in sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ+= Ġg in sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ+= Ġbin sum ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack pointer Ġ= Ġ( stack pointer Ġ+ Ġ 1 ) Ġ% Ġdiv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ stack pointer Ġ% Ġdiv ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ+= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ-= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ-= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ-= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy i ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy w Ġ+= Ġw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( x Ġ< Ġw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ= Ġb sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ= Ġg sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ= Ġr sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ= Ġbout sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ= Ġg out sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ= Ġrout sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ= Ġbin sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ= Ġg in sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy p Ġ= Ġ- radius Ġ* Ġw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġ- radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= Ġradius ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy i Ġ= ĠMath . max ( 0 , Ġy p ) Ġ+ Ġx ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ i Ġ+ Ġradius ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 0 ] Ġ= Ġr [ yi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 1 ] Ġ= Ġg [ yi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 2 ] Ġ= Ġb [ yi ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr bs Ġ= Ġr 1 Ġ- ĠMath . abs ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ+= Ġr [ yi ] Ġ* Ġr bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ+= Ġg [ yi ] Ġ* Ġr bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ+= Ġb [ yi ] Ġ* Ġr bs ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ+= Ġs ir [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ+= Ġs ir [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġhm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy p Ġ+= Ġw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy i Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack pointer Ġ= Ġradius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( y Ġ< Ġh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPre serve Ġalpha Ġchannel : Ġ( Ġ 0 xff 0 0 0 0 0 0 Ġ& Ġpix [ yi ] Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpix [ yi ] Ġ= Ġ 0 xff 0 0 0 0 0 0 . toInt () Ġand Ġpix [ yi ] Ġor Ġ( dv [ r sum ] Ġshl Ġ 1 6 ) Ġor Ġ( dv [ g sum ] Ġshl Ġ 8 ) Ġor Ġdv [ b sum ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ-= Ġrout sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ-= Ġg out sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ-= Ġbout sum ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack start Ġ= Ġstack pointer Ġ- Ġradius Ġ+ Ġdiv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ stack start Ġ% Ġdiv ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ-= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ-= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ-= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv min [ y ] Ġ= ĠMath . min ( y Ġ+ Ġr 1 , Ġhm ) Ġ* Ġw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ= Ġx Ġ+ Ġv min [ y ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 0 ] Ġ= Ġr [ p ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 1 ] Ġ= Ġg [ p ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir [ 2 ] Ġ= Ġb [ p ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ+= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sum Ġ+= Ġr in sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg sum Ġ+= Ġg in sum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb sum Ġ+= Ġbin sum ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack pointer Ġ= Ġ( stack pointer Ġ+ Ġ 1 ) Ġ% Ġdiv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ir Ġ= Ġstack [ stack pointer ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrout sum Ġ+= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg out sum Ġ+= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbout sum Ġ+= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr in sum Ġ-= Ġs ir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg in sum Ġ-= Ġs ir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin sum Ġ-= Ġs ir [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy i Ġ+= Ġw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret . set Pixels ( pix , Ġ 0 , Ġw , Ġ 0 , Ġ 0 , Ġw , Ġh ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł é¢ľèī² è¾¹ æ¡Ĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param ĠborderWidth Ġ è¾¹ æ¡Ĩ å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠĠĠĠ Ġ è¾¹ æ¡Ĩ çļĦ é¢ľèī² åĢ¼ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¸¦ é¢ľèī² è¾¹ æ¡Ĩ åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġadd Frame ( src : ĠBitmap , ĠborderWidth : ĠInt , Ġcolor : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdouble Border Ġ= ĠborderWidth Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= Ġsrc . width Ġ+ Ġdouble Border ĊĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= Ġsrc . height Ġ+ Ġdouble Border ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( new Width , Ġnew Height , Ġsrc . config ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġnew Width , Ġnew Height ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġ// Ġset Stroke Width æĺ¯ å±ħ ä¸Ń çĶ» çļĦ ï¼Į æīĢä»¥ è¦ģ ä¸¤ åĢ į çļĦ å®½åº¦ æīįèĥ½ çĶ» ï¼Į åĲ¦åĪĻ æľī ä¸Ģ åįĬ çļĦ å®½åº¦ æĺ¯ ç©º çļĦ ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġdouble Border . toFloat () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , ĠborderWidth . toFloat (), ĠborderWidth . toFloat (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł åĢĴ å½± ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ çļĦ ĊĠĠĠĠ Ġ* Ġ@ param Ġreflection Height Ġ åĢĴ å½± é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¸¦ åĢĴ å½± åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġadd Reflection ( src : ĠBitmap , Ġreflection Height : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġ åİŁ åĽ¾ ä¸İ åĢĴ å½± ä¹ĭéĹ´çļĦ éĹ´ è·Ŀ ĊĠĠĠĠĠĠĠ Ġval ĠREF LECTION _ GAP Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġsrc Width Ġ= Ġsrc . width ĊĠĠĠĠĠĠĠ Ġval Ġsrc Height Ġ= Ġsrc . height ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( 1 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġreflection Bitmap Ġ= ĠBitmap . create Bitmap ( src , Ġ 0 , Ġsrc Height Ġ- Ġreflection Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Width , Ġreflection Height , Ġmatrix , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠBitmap . create Bitmap ( src Width , Ġsrc Height Ġ+ Ġreflection Height , Ġsrc . config ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , Ġ 0 f , Ġ 0 f , Ġnull ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( reflection Bitmap , Ġ 0 f , Ġ( src Height Ġ+ ĠREF LECTION _ GAP ). toFloat (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠLinear Gradient ( 0 f , Ġsrc Height . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ( ret . height Ġ+ ĠREF LECTION _ GAP ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 0 FFFFFF , Ġ 0 x 0 0 FFFFFF , ĠShader . Tile Mode . MIR ROR ) ĊĠĠĠĠĠĠĠ Ġpaint . shader Ġ= Ġshader ĊĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . DST _ IN ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( 0 f , Ġ( src Height Ġ+ ĠREF LECTION _ GAP ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Width . toFloat (), Ġret . height . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! reflection Bitmap . is Re cyc led ) Ġreflection Bitmap . recycle () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł æĸĩåŃĹ æ°´ åį° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġ Ġæ ° ´ åį° æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Size Ġæ ° ´ åį° åŃĹ ä½ĵ å¤§å°ı ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠ Ġæ ° ´ åį° åŃĹ ä½ĵ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ x ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ y ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¸¦ æľī æĸĩåŃĹ æ°´ åį° çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Text Watermark ( src : ĠBitmap , Ġcontent : ĠString , Ġtext Size : ĠInt , Ġcolor : ĠInt , Ġx : ĠFloat , Ġy : ĠFloat ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Text Watermark ( src , Ġcontent , Ġtext Size . toFloat (), Ġcolor , Ġx , Ġy , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł æĸĩåŃĹ æ°´ åį° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Ġ Ġæ ° ´ åį° æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Size Ġæ ° ´ åį° åŃĹ ä½ĵ å¤§å°ı ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠ Ġæ ° ´ åį° åŃĹ ä½ĵ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ x ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ y ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¸¦ æľī æĸĩåŃĹ æ°´ åį° çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Text Watermark ( src : ĠBitmap , Ġcontent : ĠString ?, Ġtext Size : ĠFloat , Ġcolor : ĠInt , Ġx : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠFloat , Ġre cycle : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src ) Ġ|| Ġcontent Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsrc . copy ( src . config , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġpaint . getText Bounds ( content , Ġ 0 , Ġcontent . length , Ġbounds ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( content , Ġx , Ġy Ġ+ Ġtext Size , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł åĽ¾çīĩ æ°´ åį° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġwater mark Ġ åĽ¾çīĩ æ°´ åį° ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ x ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠĠĠĠĠĠĠĠ Ġ èµ· å§ĭ åĿĲæłĩ y ĊĠĠĠĠ Ġ* Ġ@ param Ġalpha ĠĠĠĠ Ġ éĢı æĺİ åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¸¦ æľī åĽ¾çīĩ æ°´ åį° çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġadd Image Watermark ( src : ĠBitmap , Ġwater mark : ĠBitmap , Ġx : ĠInt , Ġy : ĠInt , Ġalpha : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsrc . copy ( src . config , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEmpty Bitmap ( watermark )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( watermark , Ġx . toFloat (), Ġy . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è½¬ ä¸º alpha ä½į åĽ¾ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġalpha ä½į åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġto Alpha ( src : ĠBitmap , Ġre cycle : ĠBoolean ? Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsrc . extract Alpha () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle !! Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è½¬ ä¸º çģ ° åº¦ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ çģ ° åº¦ åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġto Gray ( src : ĠBitmap , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġgray Bitmap Ġ= ĠBitmap . create Bitmap ( src . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( gray Bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġval Ġcolor Matrix Ġ= ĠColor Matrix () ĊĠĠĠĠĠĠĠ Ġcolor Matrix . set Sat uration ( 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Matrix Color Filter Ġ= ĠColor Matrix Color Filter ( color Matrix ) ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġcolor Matrix Color Filter ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( src , Ġ 0 f , Ġ 0 f , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġgray Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¿ĿåŃĺ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠĠĠ Ġ è¦ģ ä¿ĿåŃĺ åĪ° çļĦæĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ param Ġformat Ġ Ġ æł¼å¼ı ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġ æĪĲåĬŁ < br ></ br >` false `: Ġ å¤±è´¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġsave ( src : ĠBitmap , Ġfile : ĠFile , Ġformat : ĠCompress Format , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src ) Ġ|| Ġ! FileUtils . create Or Exists File ( file )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġprintln ( src . width . toString () Ġ+ Ġ", Ġ" Ġ+ Ġsrc . height ) ĊĠĠĠĠĠĠĠ Ġvar Ġos : ĠOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos Ġ= ĠBuffered OutputStream ( File OutputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġsrc . compress ( format , Ġ 1 0 0 , Ġos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Close Utils . close IO ( os ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® æĸĩä»¶ åĲį åĪ¤æĸŃ æĸĩä»¶ æĺ¯åĲ¦ ä¸º åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Ġ ãĢĢ æĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġæĺ¯ < br ></ br >` false `: Ġ åĲ¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Image ( file : ĠFile ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile Ġ!= Ġnull Ġ&& Ġis Image ( file . path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® æĸĩä»¶ åĲį åĪ¤æĸŃ æĸĩä»¶ æĺ¯åĲ¦ ä¸º åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġ ãĢĢ æĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġæĺ¯ < br ></ br >` false `: Ġ åĲ¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Image ( filePath : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠfilePath . toUpperCase () ĊĠĠĠĠĠĠĠ Ġreturn Ġpath . endsWith (". PNG ") Ġ|| Ġpath . endsWith (". JPG ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpath . endsWith (". JPEG ") Ġ|| Ġpath . endsWith (". B MP ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpath . endsWith (". G IF ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġæĸĩä»¶ è·¯å¾Ħ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ImageType ( filePath : ĠString ): ĠString Ġ? { ĊĠĠĠĠĠĠĠ Ġreturn Ġget ImageType ( FileUtils . getFile By Path ( filePath )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Ġæĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ImageType ( file : ĠFile ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġ` is `: ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` Ġ= ĠFileInputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget ImageType (` is `) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Close Utils . close IO (` is `) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæµ ģ èİ·åıĸ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Ġ åĽ¾çīĩ è¾ĵåħ¥ æµģ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ImageType (` is `: ĠInputStream ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` is ` Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(` is `. read ( bytes , Ġ 0 , Ġ 8 ) Ġ!= Ġ- 1 ) Ġget ImageType ( bytes ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes Ġbitmap çļĦ åīį 8 åŃĹèĬĤ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ImageType ( bytes : ĠByteArray ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is JPEG ( bytes )) Ġreturn Ġ" JPEG " ĊĠĠĠĠĠĠĠ Ġif Ġ( is G IF ( bytes )) Ġreturn Ġ" G IF " ĊĠĠĠĠĠĠĠ Ġif Ġ( is PNG ( bytes )) Ġreturn Ġ" PNG " ĊĠĠĠĠĠĠĠ Ġif Ġ( is B MP ( bytes )) Ġreturn Ġ" B MP " ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis JPEG ( b : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb . size Ġ>= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 0 ] Ġ== Ġ 0 xFF . to Byte () Ġ&& Ġb [ 1 ] Ġ== Ġ 0 xD 8 . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis G IF ( b : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb . size Ġ>= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 0 ] Ġ== Ġ' G '. to Byte () Ġ&& Ġb [ 1 ] Ġ== Ġ' I '. to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 2 ] Ġ== Ġ' F '. to Byte () Ġ&& Ġb [ 3 ] Ġ== Ġ' 8 '. to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( b [ 4 ] Ġ== Ġ' 7 '. to Byte () Ġ|| Ġb [ 4 ] Ġ== Ġ' 9 '. to Byte ()) Ġ&& Ġb [ 5 ] Ġ== Ġ' a '. to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis PNG ( b : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb . size Ġ>= Ġ 8 Ġ&& Ġb [ 0 ] Ġ== Ġ 1 3 7 . to Byte () Ġ&& Ġb [ 1 ] Ġ== Ġ 8 0 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 2 ] Ġ== Ġ 7 8 . to Byte () Ġ&& Ġb [ 3 ] Ġ== Ġ 7 1 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 4 ] Ġ== Ġ 1 3 . to Byte () Ġ&& Ġb [ 5 ] Ġ== Ġ 1 0 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 6 ] Ġ== Ġ 2 6 . to Byte () Ġ&& Ġb [ 7 ] Ġ== Ġ 1 0 . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis B MP ( b : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb . size Ġ>= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġb [ 0 ]. toInt () Ġ== Ġ 0 x 4 2 Ġ&& Ġb [ 1 ]. toInt () Ġ== Ġ 0 x 4 d ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ bitmap å¯¹è±¡ æĺ¯åĲ¦ ä¸ºç©º ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true `: Ġæĺ¯ < br ></ br >` false `: Ġ åĲ¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠisEmpty Bitmap ( src : ĠBitmap ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsrc Ġ== Ġnull Ġ|| Ġsrc . width Ġ== Ġ 0 Ġ|| Ġsrc . height Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ************************ ****** ~~~~~~~~ ~ Ġä¸ĭ æĸ¹ åĴĮ åİĭç¼© æľī åħ³ Ġ ~~~~~~~~ ~ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ç¼© æĶ¾ åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Width Ġ Ġ æĸ° å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Height Ġ æĸ° é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompress By Scale ( src : ĠBitmap , Ġnew Width : ĠInt , Ġnew Height : ĠInt ): ĠBitmap Ġ? { ĊĠĠĠĠĠĠĠ Ġreturn Ġscale ( src , Ġnew Width , Ġnew Height , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ç¼© æĶ¾ åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Width Ġ Ġ æĸ° å®½åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Height Ġ æĸ° é«ĺåº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompress By Scale ( src : ĠBitmap , Ġnew Width : ĠInt , Ġnew Height : ĠInt , Ġre cycle : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscale ( src , Ġnew Width , Ġnew Height , Ġre cycle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ç¼© æĶ¾ åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Width Ġ Ġ ç¼© æĶ¾ å®½åº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Height Ġ ç¼© æĶ¾ é«ĺåº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompress By Scale ( src : ĠBitmap , Ġscale Width : ĠFloat , Ġscale Height : ĠFloat ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscale ( src , Ġscale Width , Ġscale Height , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ç¼© æĶ¾ åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Width Ġ Ġ ç¼© æĶ¾ å®½åº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Height Ġ ç¼© æĶ¾ é«ĺåº¦ åĢ į æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç¼© æĶ¾ åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompress By Scale ( src : ĠBitmap , Ġscale Width : ĠFloat , Ġscale Height : ĠFloat , Ġre cycle : ĠBoolean ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscale ( src , Ġscale Width , Ġscale Height , Ġre cycle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī è´¨ éĩı åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġquality Ġ è´¨ éĩı ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è´¨ éĩı åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġcompress By Quality ( src : ĠBitmap , Ġ@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 1 0 0 ) Ġquality : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġsrc . compress ( Compress Format . JPEG , Ġquality , Ġba os ) ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī è´¨ éĩı åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Byte Size Ġ åħģè®¸ æľĢå¤§ åĢ¼ åŃĹèĬĤ æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è´¨ éĩı åİĭç¼© åİĭç¼© è¿ĩ çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġcompress By Quality ( src : ĠBitmap , Ġmax Byte Size : ĠLong , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src ) Ġ|| Ġmax Byte Size Ġ<= Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġvar Ġquality Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġsrc . compress ( Compress Format . JPEG , Ġquality , Ġba os ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( ba os . toByteArray (). size Ġ> Ġmax Byte Size Ġ&& Ġquality Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġba os . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquality Ġ-= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . compress ( Compress Format . JPEG , Ġquality , Ġba os ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( quality Ġ< Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī éĩĩ æł· å¤§å°ı åİĭç¼© ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc ĠĠĠĠĠĠĠ Ġæ º Ĳ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġsample Size Ġ éĩĩ æł· çİĩ å¤§å°ı ĊĠĠĠĠ Ġ* Ġ@ param Ġre cycle ĠĠĠ Ġæĺ¯åĲ¦ åĽŀ æĶ¶ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĮī éĩĩ æł· çİĩ åİĭç¼© åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġcompress By Sample Size ( src : ĠBitmap , Ġsample Size : ĠInt , Ġre cycle : ĠBoolean Ġ= Ġfalse ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Bitmap ( src )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġsample Size ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġsrc . compress ( Compress Format . JPEG , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġif Ġ( recycle Ġ&& Ġ! src . is Re cyc led ) Ġsrc . recycle () ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size , Ġoptions ) ĊĠĠĠ Ġ} Ċ } Ċ