Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android imageCapture.takePicture-保存的图像转换为位图_Android_Kotlin_Android Bitmap - Fatal编程技术网

Android imageCapture.takePicture-保存的图像转换为位图

Android imageCapture.takePicture-保存的图像转换为位图,android,kotlin,android-bitmap,Android,Kotlin,Android Bitmap,我有一个捕获图像的方法: fun captureImage() { val dialog = AlertDialog.Builder(this) .setMessage("Saving picture...") .setCancelable(false) .show() val file = File( getExternalFilesD

我有一个捕获图像的方法:


fun captureImage() {
        val dialog = AlertDialog.Builder(this)
            .setMessage("Saving picture...")
            .setCancelable(false)
            .show()

        val file = File(
                getExternalFilesDir(null)?.absolutePath,
                System.currentTimeMillis().toString() + ".jpg"
        )
        file.createNewFile()

        var image_bitmap: Bitmap? = null

        val outputFileOptions = ImageCapture.OutputFileOptions.Builder(file).build()
        imageCapture.takePicture(outputFileOptions,
                Executors.newSingleThreadExecutor(),
                object : ImageCapture.OnImageSavedCallback {
                    override fun onImageSaved(output: ImageCapture.OutputFileResults) {

   //here I tried different things

                        runOnUiThread {
                            dialog.dismiss()
                            Toast.makeText(this@MainActivity, "Image saved!", Toast.LENGTH_LONG).show()
                        }
                    }

                    override fun onError(exception: ImageCaptureException) {
                        runOnUiThread {
                            dialog.dismiss()
                            Toast.makeText(this@MainActivity, exception.message, Toast.LENGTH_LONG)
                                    .show()
                        }
                    }
                })

        findViewById<ImageView>(R.id.image_view).setImageBitmap(image_bitmap)
    }


有趣的捕获图像(){
val dialog=AlertDialog.Builder(此)
.setMessage(“正在保存图片…”)
.setCancelable(错误)
.show()
val file=file(
getExternalFilesDir(null)?.absolutePath,
System.currentTimeMillis().toString()+“.jpg”
)
file.createNewFile()文件
var图像\u位图:位图?=null
val outputFileOptions=ImageCapture.outputFileOptions.Builder(file.build())
imageCapture.takePicture(输出文件选项,
Executors.newSingleThreadExecutor(),
对象:ImageCapture.OnImageSavedCallback{
覆盖已保存的图像(输出:ImageCapture.OutputFileResults){
//在这里,我尝试了不同的东西
runOnUiThread{
dialog.discover()的
Toast.makeText(this@MainActivity,“已保存图像!”,Toast.LENGTH\u LONG.show()
}
}
重写错误(异常:ImageCaptureException){
runOnUiThread{
dialog.discover()的
Toast.makeText(this@MainActivity,exception.message,Toast.LENGTH\u LONG)
.show()
}
}
})
findViewById(R.id.image\u视图).setImageBitmap(image\u位图)
}

我想从保存在.takePicture方法中的图像中获取位图,我尝试了各种方法,但没有一种像我所希望的那样工作

您必须调用
ImageView.setImageBitmap()
中的
onImageSaved()
,因此只需使用以下方法:

 override fun onImageSaved(output: ImageCapture.OutputFileResults) {

                //here I tried different things
                runOnUiThread {
                      val bitmap: Bitmap = BitmapFactory.decodeFile(file.path)
                      findViewById<ImageView>(R.id.image_view).setImageBitmap(bitmap)
                      dialog.dismiss()
                      Toast.makeText(this@MainActivity, "Image saved!", Toast.LENGTH_LONG).show()
                 }
           }

如果我想用这张照片以后用呢?因为如果我尝试将它保存在onImageSaved()中的全局变量中,并且我稍后尝试使用它,它会说它为null是它的null,请检查此项
/storage/emulated/0/Android/data/{com.YourPackgeName}/files/1617841388672.jpg