package Ġpa ul . host . camera . common . gif Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Size Ċ import Ġandroidx . core . graphics . get Ċ Ċ type alias ĠFrame s Ġ= ĠList < Frame > Ċ Ċ class ĠFrame ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠResolution Ġof Ġthe Ġframe Ġin Ġpixels . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsize : ĠSize , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImage Ġin Ġ 2 D ĠRGB Ġformat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġimage : ĠArray < IntArray > Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( bitmap : ĠBitmap ) Ġ= ĠFrame ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠSize ( bitmap . width , Ġbitmap . height ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġbitmap . to 2 DR GB () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Frame {" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" size =$ size " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġimage =[ ${ image . size } ][ ${ image . first (). size }] " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' }' ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠFrame ĊĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ!= Ġother . size ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! image . content Equals ( other . image )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsize . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġimage . content HashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠList < Bitmap >. to Frames (): ĠFrame s Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Frame >() ĊĠĠĠ Ġval Ġimage Ġ= ĠArray ( first (). height ) Ġ{ ĠInt Array ( first (). width ) Ġ} ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to 2 DR GB ( image ) ĊĠĠĠĠĠĠĠ Ġresult . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSize ( it . width , Ġit . height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġit . recycle () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun ĠBitmap . to Frame (): ĠFrame Ġ{ ĊĠĠĠ Ġval Ġframe Ġ= ĠFrame . create ( this ) ĊĠĠĠ Ġthis . recycle () ĊĠĠĠ Ġreturn Ġframe Ċ } Ċ Ċ fun ĠBitmap . to 2 DR GB (): ĠArray < IntArray > Ġ{ ĊĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġthis . width ĊĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġthis . height ĊĠĠĠ Ġval Ġresult Ġ= ĠArray ( height ) Ġ{ ĠInt Array ( width ) Ġ} ĊĠĠĠ Ġto 2 DR GB ( result ) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun ĠBitmap . to 2 DR GB ( result : ĠArray < IntArray >) Ġ{ ĊĠĠĠ Ġfor Ġ( row Ġin Ġ 0 Ġuntil Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( col Ġin Ġ 0 Ġuntil Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ row ][ col ] Ġ= Ġthis [ col , Ġrow ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }