背景を消すためのライブラリを見つけました。コードをライブラリからプロジェクトにコピーします。別の実装が欲しいです。ユーザーがボタンをクリックしてカメラを開き、結果が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