package Ġcom . fm . library . face Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġcom . fm . library . face . module . Box Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . ByteBuffer Ċ Ċ object ĠUtils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»İ assets ä¸Ń è¯»åıĸ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġfilename ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġread From Assets ( context : ĠContext , Ġfilename : ĠString ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ĊĠĠĠĠĠĠĠ Ġval Ġasm Ġ= Ġcontext . assets ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` is ` Ġ= Ġasm . open ( filename !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode Stream (` is `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `. close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* Ġåľ¨ bitmap ä¸Ĭ çĶ» åĩº äºº èĦ ¸ æ¡Ĩ Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġdraw Box Rect ( bitmap : ĠBitmap , Ġbox : ĠBox ?): ĠBitmap ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( box Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġmutable Bitmap Ġ= Ġbitmap . copy ( Bitmap . Config . ARGB _ 8 8 8 8 , Ġtrue ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( mutable Bitmap ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () Ċ // ĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . RED Ċ // ĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE Ċ // ĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 4 f Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect F ( box . x 1 . toFloat (), Ġbox . y 1 . toFloat (), Ġbox . x 2 . toFloat (), Ġbox . y 2 . toFloat ()) Ċ // ĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġpaint ) Ċ // ĠĠĠĠĠĠĠ Ġbox . land marks ?. forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( it . x , Ġit . y , Ġ 5 F , Ġpaint ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġmutable Bitmap Ċ // ĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī æ¯Ķ ä¾ĭ ç¼© æĶ¾ åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġorigin Ġ åİŁ åĽ¾ ĊĠĠĠĠ Ġ* Ġ@ param Ġratio Ġ Ġæ¯ Ķ ä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĸ°çļĦ bitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscale Bitmap ( origin : ĠBitmap ?, Ġratio : ĠFloat ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( origin Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġorigin . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġorigin . height ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( ratio , Ġratio ) ĊĠĠĠĠĠĠĠ Ġval Ġnew BM Ġ= ĠBitmap . create Bitmap ( origin , Ġ 0 , Ġ 0 , Ġwidth , Ġheight , Ġmatrix , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( new BM Ġ== Ġorigin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew BM ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġorigin . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġnew BM ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® äºº èĦ ¸ æ¡Ĩ è£ ģ åī ª åĽ¾çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap Ġ è¾ĵåħ¥ çļĦ åĽ¾çīĩ ï¼Į åı¯èĥ½ åĮħåĲ« äºº èĦ ¸ ï¼Į ä¹Ł åı¯èĥ½ ä¸į åĮħåĲ« äºº èĦ ¸ ĊĠĠĠĠ Ġ* Ġ@ param Ġbox Ġ äºº èĦ ¸ æ¡Ĩ ä¿¡æģ¯ ï¼Į å¦Ĥæŀľ ä¸Ĭ ä¸Ģ å¸ § æ²¡æľī äºº èĦ ¸ ï¼Į åĪĻ ä¸º null ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġcrop Bitmap ( bitmap : ĠBitmap , Ġbox : ĠB box ?): ĠBitmap Ġ= Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( box Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . x 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . y 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . x 2 Ġ- Ġbox . x 1 Ġ+ Ġ 9 0 ). coerce At Most ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . width Ġ- Ġ( box . x 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . y 2 Ġ- Ġbox . y 1 Ġ+ Ġ 9 0 ). coerce At Most ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . height Ġ- Ġ( box . y 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĊĠĠĠ Ġfun Ġcrop Bitmap ( bitmap : ĠBitmap , Ġbox : ĠBox ?): ĠBitmap Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( box Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . x 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . y 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . x 2 Ġ- Ġbox . x 1 Ġ+ Ġ 9 0 ). coerce At Most ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . width Ġ- Ġ( box . x 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( box . y 2 Ġ- Ġbox . y 1 Ġ+ Ġ 9 0 ). coerce At Most ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . height Ġ- Ġ( box . y 1 Ġ- Ġ 3 0 ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä» ¿ å°Ħ åıĺ æį¢ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap ĠĠ Ġ åİŁ åĽ¾çīĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġland mark Ġland mark ĊĠĠĠĠ Ġ* Ġ@ return Ġ åıĺ æį¢ åĲİçļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwarp Affine ( bitmap : ĠBitmap , Ġland mark : ĠArray < PointF >): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( land mark [ 0 ]. x Ġ+ Ġland mark [ 1 ]. x Ġ+ Ġland mark [ 2 ]. x ) Ġ/ Ġ 3 . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( land mark [ 0 ]. y Ġ+ Ġland mark [ 1 ]. y Ġ+ Ġland mark [ 2 ]. y ) Ġ/ Ġ 3 . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġland mark [ 1 ]. y Ġ- Ġland mark [ 0 ]. y . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġland mark [ 1 ]. x Ġ- Ġland mark [ 0 ]. x . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġdegrees Ġ= ĠMath . to Degrees ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . atan 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdy . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdx . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Rotate (- degrees , Ġx , Ġy ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Pixels RGBA ( image : ĠBitmap ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ åĽ¾åĥı çĶ± å¤ļå°ĳ ä¸ª åĥı ç´ł çĤ¹ ç»Ħ æĪĲ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġimage . byte Count ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . allocate ( bytes ) Ġ// ĠåĪĽå»º ä¸Ģä¸ª æĸ°çļĦ buffer ĊĠĠĠĠĠĠĠ Ġimage . copy Pixels To Buffer ( buffer ) Ġ// Ġå°Ĩ æķ°æį® èµĭåĢ¼ ç»Ļ buffer ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer . array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ ä¼łåħ¥ å¯¹ bitmap è¿Ľè¡Į åİĭç¼© ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ ç¼© æĶ¾ åİĭç¼© ï¼Į ä»¥åıĬ æĶ¹åıĺ éĢļ éģĵ æķ°éĩı ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠéĢļè¿ĩ çĶŁæĪĲ æĸ°çļĦ å°ı çļĦ åĽ¾çīĩ ï¼Į ä¹ĭåĲİ åĪłéĻ¤ åİŁ æĿ¥ åĽ¾çīĩ è¾¾ åĪ° åİĭç¼© çĽ®çļĦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap : Ġ è¦ģ åİĭç¼© çļĦ åĽ¾çīĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Compress Bitmap ( bitmap : ĠBitmap ): ĠBitmap Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix (). also Ġ{ Ġit . set Scale ( 0 . 1 2 5 f , Ġ 0 . 1 2 5 f ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsmall Bitmap Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( bitmap , Ġ 0 , Ġ 0 , Ġbitmap . width , Ġbitmap . height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġsmall Bitmap ĊĊĠĠĠ Ġ} ĊĊ Ċ }