Android 将数据从图像选择器转换为位图(Kotlin)?

Android 将数据从图像选择器转换为位图(Kotlin)?,android,kotlin,bitmap,Android,Kotlin,Bitmap,我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是首先将其保存为位图。然而,我不确定我将如何做到这一点 这是我现在拥有的代码:它允许用户选择一个图像,然后将其显示在imageview中。但是,我不知道如何将我的数据?.data转换为位图 如果这不是一个很好的问题,我很抱歉,我对在android应用程序中处理图像和图像类型非常陌生。任何帮助都将不胜感激 //单击图像按钮时打开库,获取图像 view.image\u et.setOnClickListener{ readStor

我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是首先将其保存为位图。然而,我不确定我将如何做到这一点

这是我现在拥有的代码:它允许用户选择一个图像,然后将其显示在imageview中。但是,我不知道如何将我的
数据?.data
转换为位图

如果这不是一个很好的问题,我很抱歉,我对在android应用程序中处理图像和图像类型非常陌生。任何帮助都将不胜感激

//单击图像按钮时打开库,获取图像
view.image\u et.setOnClickListener{
readStorageTask()
//选择图像的意图
val intent=intent(intent.ACTION\u PICK)
intent.type=“image/*”
startActivityForResult(意向书,1001)
}
//拾取图像的处理结果
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
if(resultCode==Activity.RESULT_OK&&requestCode==1001){
预览\u image.setImageURI(数据?.data)
}
}

我见过一些类似于我的StackOverflow的问题在Java中处理相同的问题,但我尝试过的那些问题对我来说并不奏效。任何帮助都将不胜感激

您可以在缓存目录中创建一个文件,然后创建位图

    if (data != null && data.data != null) {
        val uri = data.data!!
        val inputStream = requireContext().contentResolver.openInputStream(uri)
        val cursor = requireContext().contentResolver.query(uri, null, null, null, null)
        cursor?.use { c ->
          val nameIndex = c.getColumnIndex(OpenableColumns.DISPLAY_NAME)
          if (c.moveToFirst()) {
            val name = c.getString(nameIndex)
            inputStream?.let { inputStream ->
               // create same file with same name
               val file = File(requireContext().cacheDir, name)
               val os = file.outputStream()
                os.use {
                 inputStream.copyTo(it)
                 }
                val bitmap = BitmapFactory.decodeFile(file.absolutePath)
              }
            }
         }               
  }

您可以在缓存目录中创建一个文件,然后创建位图

    if (data != null && data.data != null) {
        val uri = data.data!!
        val inputStream = requireContext().contentResolver.openInputStream(uri)
        val cursor = requireContext().contentResolver.query(uri, null, null, null, null)
        cursor?.use { c ->
          val nameIndex = c.getColumnIndex(OpenableColumns.DISPLAY_NAME)
          if (c.moveToFirst()) {
            val name = c.getString(nameIndex)
            inputStream?.let { inputStream ->
               // create same file with same name
               val file = File(requireContext().cacheDir, name)
               val os = file.outputStream()
                os.use {
                 inputStream.copyTo(it)
                 }
                val bitmap = BitmapFactory.decodeFile(file.absolutePath)
              }
            }
         }               
  }

为获取的uri打开输入流,然后使用BitmapFactory.decodeStream()

在Java中:

InputStream is = getContentResolver().openInputStream(data.getData());

Bitmap bitmap = BitmapFactory.decodeStream(is);

仅此而已。

为获得的uri打开一个输入流,然后使用BitmapFactory.decodeStream()

在Java中:

InputStream is = getContentResolver().openInputStream(data.getData());

Bitmap bitmap = BitmapFactory.decodeStream(is);

仅此而已。

无需创建位图。您可以使用此类来查找图像的实际路径,并使用毕加索或其他库来显示来自实际路径的预览path@JaiprakashSoni谢谢你的评论!我以前见过类似的东西,但我希望即使从用户手机上删除了实际图像,图像仍保留在我的应用程序中。无需创建位图。您可以使用此类来查找图像的实际路径,并使用毕加索或其他库来显示来自实际路径的预览path@JaiprakashSoni谢谢你的评论!我以前见过类似的事情,但我希望即使从用户手机上删除了实际图像,图像也能保留在我的应用程序中。