java - 背景を消去する

okwaves2024-01-25  8

背景を消すためのライブラリを見つけました。コードをライブラリからプロジェクトにコピーします。別の実装が欲しいです。ユーザーがボタンをクリックしてカメラを開き、結果がOKであれば背景を消去したいと考えています。助けていただけませんか。私の英語ですみません。

package com.example.backgrounderaser

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.github.gabrielbb.cutout.CutOut
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    private companion object {
        private const val REQUEST_CODE_FOR_CAMERA = 191
        private const val CUTOUT_ACTIVITY_REQUEST_CODE = 368
        private lateinit var uri: Uri
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val imageIconUri: Uri = getUriFromDrawable(R.drawable.image_icon)
        imageView.setImageURI(imageIconUri)
        imageView.tag = imageIconUri

        fab.setOnClickListener {
            val testImageUri: Uri = getUriFromDrawable(R.drawable.test_image)
            CutOut.activity()
                .src(testImageUri)
                .bordered()
                .noCrop()
                .start(this)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == CUTOUT_ACTIVITY_REQUEST_CODE) {
            val imageUri = CutOut.getUri(data)
            // Save the image using the returned Uri here
            // Save the image using the returned Uri here
            imageView.setImageURI(imageUri)
            imageView.tag = imageUri
        }
    }

    private fun getUriFromDrawable(drawableId: Int): Uri? {
        return Uri.parse(
            "android.resource://$packageName/drawable/" + applicationContext.resources.getResourceEntryName(
                drawableId
            )
        )
    }
}

if (resultCode == RESULT_OK) ステートメントのことですか?

– ムアード アブデルガフォー アイイタリア

2020 年 9 月 3 日 10:52

はい!結果がOKになったら欲しいです。

– ルスタム

2020 年 9 月 3 日 10:56

それでは、カメラを使用して写真をキャプチャするコード全体を実装したいのですか?もっと詳しく説明してください。できれば喜んでお手伝いします。

– ムアード アブデルガフォー アイイタリア

2020 年 9 月 3 日 11:01

はい!ユーザーが捕らえられたとき、まさにそれが欲しいですカメラを使用して写真を撮影すると、このライブラリは画像の背景を消去します。

– ルスタム

2020 年 9 月 3 日 11:04



------------------------

1 - 作業を簡単にするために、このライブラリを追加します: EasyImage

   implementation 'com.github.jkwiecien:EasyImage:3.0.4'

2 - ニーズを達成するためにライブラリを使用する方法の完全なコードは次のとおりです

class MainActivity  : AppCompatActivity() {
    lateinit var easyImage: EasyImage
    lateinit var capture: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        capture = findViewById(R.id.camera)
       
        capture.setOnClickListener {
            openCamera()
        }
    }

    private fun openCamera() {
        easyImage = EasyImage.Builder(applicationContext).build()
        easyImage.openCameraForImage(this@MainActivity )
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK) {
            easyImage.handleActivityResult(requestCode, resultCode, data, this@MainActivity , object : EasyImage.Callbacks {
                override fun onCanceled(source: MediaSource) {

                }

                override fun onImagePickerError(error: Throwable, source: MediaSource) {

                }

                override fun onMediaFilesPicked(imageFiles: Array<MediaFile>, source: MediaSource) {
                    //imageFiles[0].file
                    //imageFiles[0].file is the captured Image, use it as you want

                 //  val drawable = Drawable.createFromPath(imageFiles[0].file.absolutePath)
                 //  img.setImageDrawable(drawable)

                        CutOut.activity()
                        .src(Uri.fromFile(imageFiles[0].file))
                        .bordered()
                        .noCrop()
                        .start(this)

                }
            })
        }
    }
}

5

ここから imageDrawable を設定する方法: imageFiles[0]

– ルスタム

2020 年 9 月 3 日 11:50

あなたは私のことを理解していませんが、画像をキャプチャするときに背景を消去したいのです。はい、画像はキャプチャされていますが、画像の背景は消去されていません

– ルスタム

2020 年 9 月 3 日 11:58

@JRustam もう一度答えを見てください!

– ムアード アブデルガフォー アイイタリア

セ2020 年 3 月 12 時 01 分

@JRustam 問題が解決した場合は、私の回答を承認済みとしてください

– ムアード アブデルガフォー アイイタリア

2020 年 9 月 3 日 12:10

欲しいけどできない(私の評判は低いです(

– ルスタム

2020 年 9 月 3 日 12:25

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。