package Ġcap stone . ai image editor Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Image Decoder Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . graphics . set Ċ import Ġcap stone . ai image editor . in paint . In paint Ċ import Ġjp . co . cyber agent . android . gpu image . filter . GPU Image Filter Ċ import Ġorg . opencv . android . Utils Ċ import Ġorg . opencv . core . Mat Ċ Ċ class ĠImage Manager Ġ: ĠApplication () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġoriginal : Bitmap ĊĠĠĠ Ġlateinit Ġvar Ġmask : Bitmap ĊĠĠĠ Ġlateinit Ġvar Ġperson Original : Bitmap ĊĠĠĠ Ġlateinit Ġvar Ġbackground Original : Bitmap ĊĠĠĠ Ġlateinit Ġvar Ġperson Filtered : Bitmap ĊĠĠĠ Ġlateinit Ġvar Ġbackground Filtered : Bitmap ĊĊĊĠĠĠ Ġvar Ġperson Filters Ġ= Ġarray ListOf < GPU Image Filter ?> () ĊĠĠĠ Ġvar Ġperson Adjust s Ġ= Ġarray ListOf < Int >() ĊĠĠĠ Ġvar Ġdo H alo = false ĊĠĠĠ Ġvar Ġh alo Color = Color . WHITE ĊĊĠĠĠ Ġvar Ġbackground Filters Ġ= Ġarray ListOf < GPU Image Filter ?> () ĊĠĠĠ Ġvar Ġbackground Adjust s Ġ= Ġarray ListOf < Int >() ĊĊĠĠĠ Ġfun Ġinitialize (){ ĊĠĠĠĠĠĠĠ Ġh alo Color = Color . WHITE ĊĠĠĠĠĠĠĠ Ġperson Filters . clear () ĊĠĠĠĠĠĠĠ Ġperson Adjust s . clear () ĊĠĠĠĠĠĠĠ Ġbackground Filters . clear () ĊĠĠĠĠĠĠĠ Ġbackground Adjust s . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Filters . add ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Adjust s . add ( 5 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Filters . add ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Adjust s . add ( 5 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġperson Adjust s [ 4 ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġperson Adjust s [ 8 ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdo H alo = false ĊĠĠĠĠĠĠĠ Ġbackground Adjust s [ 5 ] Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlistener : On Finish In paint ĊĠĠĠ Ġvar ĠisIn paint ing = false ĊĊĠĠĠĠ Ġfun ĠgetImage From Uri ( selected Photo Uri : ĠUri ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . get Bitmap ( this . content Resolver , Ġselected Photo Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠImage Decoder . create Source ( this . content Resolver , Ġselected Photo Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Decoder . decode Bitmap ( source ){ decoder , _, _-> decoder . is Mutable Required = true } ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġrun Mask Correction (){ ĊĠĠĠĠĠĠĠ Ġval Ġsource = ĠMat () ĊĠĠĠĠĠĠĠ Ġval Ġmask Ġ= ĠMat () ĊĠĠĠĠĠĠĠ ĠUtils . bitmap To Mat ( original , source ) ĊĠĠĠĠĠĠĠ ĠUtils . bitmap To Mat ( this @ Image Manager . mask , mask ) ĊĠĠĠĠĠĠĠ Ġstart Mask Correction ( source . native Obj Addr , mask . native Obj Addr ) ĊĠĠĠĠĠĠĠ ĠUtils . mat To Bitmap ( mask , this . mask ) ĊĠĠĠĠĠĠĠĠĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Finish In paint ( listener : On Finish In paint ){ ĊĠĠĠĠĠĠĠ Ġthis . listener = listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart In paint (){ ĊĊĠĠĠĠĠĠĠ Ġbackground Original Ġ= ĠBitmap . create Bitmap ( original ) ĊĠĠĠĠĠĠĠ ĠIn paint Task (). execute ( 0 ) ĊĊ Ċ /* ĠĠĠĠĠĠĠ Ġvar Ġinput Ġ= ĠBitmap . create Bitmap ( original ) ĊĠĠĠĠĠĠĠ Ġval Ġmask image Ġ= ĠBitmap . create Bitmap ( mask ) ĊĊĠĠĠĠĠĠĠ Ġvar ĠW : ĠInt Ġ= Ġmask image . getWidth () ĊĠĠĠĠĠĠĠ Ġvar ĠH : ĠInt Ġ= Ġmask image . getHeight () ĊĠĠĠĠĠĠĠ Ġval Ġmask Ġ= ĠArray ( W ) Ġ{ ĠBoolean Array ( H ) Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil ĠH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil ĠW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask [ x ][ y ] Ġ= Ġmask image . get Pixel ( x , y ) Ġ== ĠColor . WHITE ĊĊĠĠĠĠĠĠĠ ĠW Ġ= Ġinput . getWidth () ĊĠĠĠĠĠĠĠ ĠH Ġ= Ġinput . getHeight () ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil ĠH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil ĠW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask [ x ][ y ]) Ġinput . set Pixel ( x , Ġy , Ġ- 0 x 1 0 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠIn paint (). in paint ( input , Ġmask , Ġ 2 ); ĊĠĠĠĠĠĠĠ Ġbackground Original = result ĊĠĠĠĠĠĠĠ Ġbackground Filtered = result . copy ( Bitmap . Config . ARGB _ 8 8 8 8 , true ) ĊĠĠĠĠĠĠĠ ĠisIn paint ing = false ĊĠĠĠĠĠĠĠ ĠLog . i (" !! "," in paint Ġfinished ") ĊĠĠĠĠĠĠĠ Ġlistener . on Finish In paint () */ ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġload Original ( uri : Uri ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Ġ= getImage From Uri ( uri ) ĊĠĠĠĠĠĠĠ Ġif ( image != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Ġ= Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Original Ġ= ĠBitmap . create Bitmap ( original ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Filtered Ġ= ĠBitmap . create Bitmap ( original ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} else Ġreturn Ġfalse ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmerge Image (): Bitmap { ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( background Filtered ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( person Filtered , 0 f , 0 f , null ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Finish In paint { ĊĠĠĠĠĠĠĠ Ġfun Ġon Finish In paint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠIn paint Task : ĠAsync Task < Int , ĠInt , ĠBitmap >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġp 0 : ĠInt ?): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn paint ing = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource = ĠMat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmask Ġ= ĠMat () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . bitmap To Mat ( original , source ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . bitmap To Mat ( this @ Image Manager . mask , mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart In paint ( source . native Obj Addr , mask . native Obj Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( original . width , original . height , Bitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . mat To Bitmap ( source , bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Post Execute ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( result != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Original = result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Filtered = result . copy ( Bitmap . Config . ARGB _ 8 8 8 8 , true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn paint ing = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" !! "," in paint Ġfinished ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Finish In paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexternal Ġfun Ġstart In paint ( image : ĠLong , Ġmask : ĠLong ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġexternal Ġfun Ġstart Mask Correction ( source Image : Long , Ġmask : Long ) Ċ Ċ }