将 Uri 转换为位图
Convert Uri to Bitmap
我想将 Uri 从 .takePicture 方法转换为位图供以后使用,我搜索了不同的方法,但每个方法都给我一个错误,说位图为空,有时是“int android.graphics.bitmap.getwidth( )' 在空对象引用上。
var imageUri:Uri?=null
private fun takePhoto() {
val photofile = File(externalMediaDirs.firstOrNull(), "picture - ${System.currentTimeMillis()}.jpg")
val output = ImageCapture.OutputFileOptions.Builder(photofile).build()
var image_View = findViewById<ImageView>(R.id.imageView)
imageCapture?.takePicture(output, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
Toast.makeText(applicationContext, "Pic saved.", Toast.LENGTH_LONG).show()
imageUri = outputFileResults.savedUri
//image_View.setImageURI(imageUri)
}
override fun onError(exception: ImageCaptureException) {
Toast.makeText(applicationContext, "Error saving pic!", Toast.LENGTH_LONG).show()
}
})
}
试试这个片段
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
引用 the documentation for getSavedUri()
:
This field is only returned if the ImageCapture.OutputFileOptions
is backed by MediaStore
constructed with #Builder(ContentResolver, Uri, ContentValues)
这不是您用于 OutputFileOptions
的构造函数。因此,检查 getSavedUri()
是否返回 null
。如果是,您将需要使用 photofile
,包括采取措施将其保存在已保存的实例状态 Bundle
。
如果 getSavedUri()
返回非 null
值,您可能需要编辑您的问题并提供与您的崩溃相关的完整堆栈跟踪(而不是使用 pastebin)。
我想将 Uri 从 .takePicture 方法转换为位图供以后使用,我搜索了不同的方法,但每个方法都给我一个错误,说位图为空,有时是“int android.graphics.bitmap.getwidth( )' 在空对象引用上。
var imageUri:Uri?=null
private fun takePhoto() {
val photofile = File(externalMediaDirs.firstOrNull(), "picture - ${System.currentTimeMillis()}.jpg")
val output = ImageCapture.OutputFileOptions.Builder(photofile).build()
var image_View = findViewById<ImageView>(R.id.imageView)
imageCapture?.takePicture(output, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
Toast.makeText(applicationContext, "Pic saved.", Toast.LENGTH_LONG).show()
imageUri = outputFileResults.savedUri
//image_View.setImageURI(imageUri)
}
override fun onError(exception: ImageCaptureException) {
Toast.makeText(applicationContext, "Error saving pic!", Toast.LENGTH_LONG).show()
}
})
}
试试这个片段
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
引用 the documentation for getSavedUri()
:
This field is only returned if the
ImageCapture.OutputFileOptions
is backed byMediaStore
constructed with#Builder(ContentResolver, Uri, ContentValues)
这不是您用于 OutputFileOptions
的构造函数。因此,检查 getSavedUri()
是否返回 null
。如果是,您将需要使用 photofile
,包括采取措施将其保存在已保存的实例状态 Bundle
。
如果 getSavedUri()
返回非 null
值,您可能需要编辑您的问题并提供与您的崩溃相关的完整堆栈跟踪(而不是使用 pastebin)。