将数据从图像选择器意图转换为位图(Kotlin)?
Convert data from image picker intent into bitmap (Kotlin)?
我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是先将其保存为位图。但是,我不确定该怎么做。
这是我现在拥有的代码:它让用户选择一个图像并在之后将其显示在图像视图中。但是,我不知道如何将 data?.data
转换为位图。
如果这不是一个很好的问题,我深表歉意,我对在 android 应用程序中处理图像和图像类型还很陌生。任何帮助将不胜感激!
// Opens gallery when image button clicked, gets image
view.image_et.setOnClickListener {
readStorageTask()
//Intent to pick image
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, 1001)
}
// Handle result of picked image
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == 1001) {
preview_image.setImageURI(data?.data)
}
}
我在 Java 中看到了一些与我类似的 Whosebug 问题,但我尝试过的问题对我来说并不奏效。任何帮助将不胜感激!
您可以在缓存目录中创建一个文件,然后创建位图
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);
就这些了。
我目前正在尝试将用户选择的任何图像保存到房间数据库中,看起来唯一的方法是先将其保存为位图。但是,我不确定该怎么做。
这是我现在拥有的代码:它让用户选择一个图像并在之后将其显示在图像视图中。但是,我不知道如何将 data?.data
转换为位图。
如果这不是一个很好的问题,我深表歉意,我对在 android 应用程序中处理图像和图像类型还很陌生。任何帮助将不胜感激!
// Opens gallery when image button clicked, gets image
view.image_et.setOnClickListener {
readStorageTask()
//Intent to pick image
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, 1001)
}
// Handle result of picked image
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == 1001) {
preview_image.setImageURI(data?.data)
}
}
我在 Java 中看到了一些与我类似的 Whosebug 问题,但我尝试过的问题对我来说并不奏效。任何帮助将不胜感激!
您可以在缓存目录中创建一个文件,然后创建位图
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);
就这些了。