/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 . ĠHu awei ĠTechnologies ĠCo ., ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . hu awei . ml kit . sample . activity . image seg Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Pair Ċ import Ġandroid . view .* Ċ import Ġandroid . widget .* Ċ import Ġcom . hu awei . h mf . tasks . On Failure Listener Ċ import Ġcom . hu awei . h ms . ml sdk . ML Analyzer Factory Ċ import Ġcom . hu awei . h ms . ml sdk . common . ML Frame Ċ import Ġcom . hu awei . h ms . ml sdk . img seg . ML Image Segmentation Analyzer Ċ import Ġcom . hu awei . h ms . ml sdk . img seg . ML Image Segmentation Setting Ċ import Ġcom . hu awei . ml kit . sample . R Ċ import Ġcom . hu awei . ml kit . sample . activity . Base Activity Ċ import Ġcom . hu awei . ml kit . sample . callback . Image Segmentation Result CallBack Ċ import Ġcom . hu awei . ml kit . sample . util . Bitmap Utils Ċ import Ġcom . hu awei . ml kit . sample . util . Image Utils Ċ import Ġcom . hu awei . ml kit . sample . views . overlay . Graphic Overlay Ċ import Ġjava . io . IOException Ċ Ċ class ĠStill Cut Photo Activity Ġ: ĠBase Activity (), ĠImage Segmentation Result CallBack Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrelative Layout Load Photo : ĠRelative Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrelative Layout Cut : ĠRelative Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrelative Layout Background s : ĠRelative Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrelative Layout Save : ĠRelative Layout ĊĠĠĠ Ġprivate Ġvar Ġgraphic Overlay : ĠGraph ic Overlay ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreview : ĠImageView ĊĠĠĠ Ġprivate Ġvar Ġimage Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġimg Background Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġorigin Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbackground Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmaxWidth Of Image : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmaxHeight Of Image : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Land S cape Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ CH OOSE _ ORIGIN PIC Ġ= Ġ 2 0 0 1 ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ CH OOSE _ BACKGROUND Ġ= Ġ 2 0 0 2 ĊĠĠĠ Ġprivate Ġvar Ġprocessed Image : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠPor trait Ġforeground Ġimage . ĊĠĠĠ Ġprivate Ġvar Ġforeground : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( saved Instance : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( saved Instance ) ĊĠĠĠĠĠĠĠ Ġthis . set ContentView ( R . layout . activity _ still _ cut ) ĊĠĠĠĠĠĠĠ Ġpreview Ġ= ĠfindViewById ( R . id . preview Pane ) ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . back ). setOnClickListener Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġis Land S cape Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Action () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelative Layout Load Photo Ġ= ĠfindViewById ( R . id . rel ativ ate _ choose Img ) ĊĠĠĠĠĠĠĠ Ġrelative Layout Cut Ġ= ĠfindViewById ( R . id . rel ativ ate _ cut ) ĊĠĠĠĠĠĠĠ Ġrelative Layout Background s Ġ= ĠfindViewById ( R . id . rel ativ ate _ background s ) ĊĠĠĠĠĠĠĠ Ġrelative Layout Save Ġ= ĠfindViewById ( R . id . rel ativ ate _ save ) ĊĠĠĠĠĠĠĠ Ġpreview Ġ= ĠfindViewById ( R . id . preview Pane ) ĊĠĠĠĠĠĠĠ Ġgraphic Overlay Ġ= ĠfindViewById ( R . id . preview Overlay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelative Layout Load Photo . setOnClickListener Ġ{ Ġselect Local Image ( REQUEST _ CH OOSE _ ORIGIN PIC ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOut line Ġthe Ġedge . ĊĠĠĠĠĠĠĠ Ġrelative Layout Cut . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ select _ picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Image Trans actor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . cut _ success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠReplace Ġbackground . ĊĠĠĠĠĠĠĠ Ġrelative Layout Background s . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ select _ picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Local Image ( REQUEST _ CH OOSE _ BACKGROUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġprocessed Ġpicture . ĊĠĠĠĠĠĠĠ Ġrelative Layout Save . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( processed Image Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . no _ pic _ needed Save , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Utils Ġ= ĠImage Utils ( this @ Still Cut Photo Activity . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Utils . save To Album ( processed Image !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . save _ success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelative Layout Save . post Ġ{ Ġselect Local Image ( REQUEST _ CH OOSE _ ORIGIN PIC ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Local Image ( request Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ P ICK , Ġnull ) ĊĠĠĠĠĠĠĠ Ġintent . setData And Type ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġ" image /* ") ĊĠĠĠĠĠĠĠ Ġthis . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CH OOSE _ ORIGIN PIC Ġ&& ĠresultCode Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġthis Ġcase , Ġimage Uri Ġis Ġreturned Ġby Ġthe Ġcho oser , Ġsave Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri Ġ= Ġdata !!. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Origin Image () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠREQUEST _ CH OOSE _ BACKGROUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ select _ picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Background Uri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Origin Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtargeted Size Ġ= Ġtarget Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Bitmap Ġ= ĠBitmap Utils . load From Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Background Uri !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtargeted Size . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtargeted Size . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Background ( background Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Background ( background Bitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ch osen ( foreground ) Ġ&& Ġis Ch osen ( background Bitmap )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠBitmap Drawable ( background Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . is Drawing Cache Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . background Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . setImage Bitmap ( foreground ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Image Ġ= ĠBitmap . create Bitmap ( preview . drawing Cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . is Drawing Cache Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ select _ picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġanalyzer : ĠML Image Segmentation Analyzer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġcreate Image Trans actor () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsetting Ġ= ĠML Image Segmentation Setting . Factory (). set Analyzer Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠML Image Segmentation Setting . BODY _ SEG ĊĠĠĠĠĠĠĠ Ġ). create () ĊĠĠĠĠĠĠĠ Ġanalyzer Ġ= ĠML Analyzer Factory . getInstance (). getImage Segmentation Analyzer ( setting ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ch osen ( origin Bitmap )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġml Frame Ġ= ĠML Frame . Creator (). set Bitmap ( origin Bitmap ). create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġanalyzer !!. async Analy se Frame ( ml Frame ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ Ġml Image Segmentation Results Ġ-> Ġ// ĠTrans act ing Ġlogic Ġfor Ġsegment Ġsuccess . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ml Image Segmentation Results Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeground Ġ= Ġml Image Segmentation Results . get Foreground () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . setImage Bitmap ( foreground ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Image Ġ= Ġ( preview . drawable Ġas ĠBitmap Drawable ). bitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Failure () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener ( On Failure Listener Ġ{ Ġ// ĠTrans act ing Ġlogic Ġfor Ġsegment Ġfailure . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Failure () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Failure Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ select _ picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Failure () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this . application Context , Ġ" Fail ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Ch osen ( bitmap : ĠBitmap ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Origin Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( image Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġoverlay Ġfirst . ĊĠĠĠĠĠĠĠ Ġgraphic Overlay !!. clear () ĊĠĠĠĠĠĠĠ Ġval Ġtargeted Size Ġ= Ġtarget Size ĊĠĠĠĠĠĠĠ Ġval Ġtarget Width Ġ= Ġtargeted Size . first ĊĠĠĠĠĠĠĠ Ġval Ġtarget Height Ġ= Ġtargeted Size . second ĊĠĠĠĠĠĠĠ Ġorigin Bitmap Ġ= ĠBitmap Utils . load From Path ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Still Cut Photo Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġhow Ġmuch Ġto Ġscale Ġdown Ġthe Ġimage . ĊĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" image S licer ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" res ized Ġimage Ġsize Ġwidth :" Ġ+ Ġorigin Bitmap ?. width Ġ+ Ġ", height : Ġ" Ġ+ Ġorigin Bitmap ?. height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpreview . setImage Bitmap ( origin Bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġmax Ġwidth Ġof Ġimage . ĊĠĠĠ Ġprivate Ġfun ĠgetMax Width Of Image (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Of Image Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Of Image Ġ= Ġif Ġ( is Land S cape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( preview . parent Ġas ĠView ). height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( preview . parent Ġas ĠView ). width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠmaxWidth Of Image !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġmax Ġheight Ġof Ġimage . ĊĠĠĠ Ġprivate Ġfun ĠgetMax Height Of Image (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Height Of Image Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Of Image Ġ= Ġif Ġ( is Land S cape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( preview . parent Ġas ĠView ). width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( preview . parent Ġas ĠView ). height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠmaxHeight Of Image !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGets Ġthe Ġtargeted Ġsize ( width Ġ/ Ġheight ). ĊĠĠĠ Ġprivate Ġval Ġtarget Size : ĠPair < Int , ĠInt > ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Width : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Height : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxWidth Ġ= ĠgetMax Width Of Image () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= ĠgetMax Height Of Image () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Width Ġ= Ġif Ġ( is Land S cape ) ĠmaxHeight Ġelse ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Height Ġ= Ġif Ġ( is Land S cape ) ĠmaxWidth Ġelse ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" height :$ target Height , width :$ target Width ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( target Width , Ġtarget Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( analyzer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Stop Ġanalyzer Ġfailed : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġimage Uri Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġimg Background Uri Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠBitmap Utils . recycle Bitmap ( origin Bitmap , Ġbackground Bitmap , Ġforeground , Ġprocessed Image ) ĊĠĠĠĠĠĠĠ Ġgraphic Overlay ?. clear () ĊĠĠĠĠĠĠĠ Ġgraphic Overlay Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Parcelable ( KEY _ IMAGE _ URI , Ġimage Uri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Of Image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ IMAGE _ MAX _ WIDTH , ĠmaxWidth Of Image !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( max Height Of Image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ IMAGE _ MAX _ HEIGHT , ĠmaxHeight Of Image !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcall Result Bitmap ( bitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessed Image Ġ= Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Capture Image Fragment " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ TA KE _ PH OT OR Ġ= Ġ 2 0 0 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ IMAGE _ URI Ġ= Ġ" KEY _ IMAGE _ URI " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ IMAGE _ MAX _ WIDTH Ġ= Ġ" KEY _ IMAGE _ MAX _ WIDTH " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ IMAGE _ MAX _ HEIGHT Ġ= Ġ" KEY _ IMAGE _ MAX _ HEIGHT " ĊĠĠĠ Ġ} Ċ }