Android 将数据从图像选择器转换为位图(Kotlin)?
我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是首先将其保存为位图。然而,我不确定我将如何做到这一点 这是我现在拥有的代码:它允许用户选择一个图像,然后将其显示在imageview中。但是,我不知道如何将我的Android 将数据从图像选择器转换为位图(Kotlin)?,android,kotlin,bitmap,Android,Kotlin,Bitmap,我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是首先将其保存为位图。然而,我不确定我将如何做到这一点 这是我现在拥有的代码:它允许用户选择一个图像,然后将其显示在imageview中。但是,我不知道如何将我的数据?.data转换为位图 如果这不是一个很好的问题,我很抱歉,我对在android应用程序中处理图像和图像类型非常陌生。任何帮助都将不胜感激 //单击图像按钮时打开库,获取图像 view.image\u et.setOnClickListener{ readStor
数据?.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谢谢你的评论!我以前见过类似的事情,但我希望即使从用户手机上删除了实际图像,图像也能保留在我的应用程序中。