android - 从相机android获取位图
问题描述
我正在尝试从我的应用程序中打开相机并获取位图。但这不起作用。我收到此错误: E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: content:/media/external/images/media/9969: open failed: ENOENT (No such file or directory)
这是代码:
private void openCamera()
{
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.TITLE, "New Picture");
contentValues.put(MediaStore.Images.Media.DESCRIPTION, "From the camera");
image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
//Camera intent
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
}
当我调用 openCamera() 时,这是活动结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode)
{
case RESULT_OK :
{
//imageView.setImageURI(image_uri); this works
Bitmap bitmap = null;
String photoPath = image_uri.toString();
bitmap = BitmapFactory.decodeFile(photoPath);
imageView.setImageBitmap(bitmap); //this doesnt work ! --> the bitmap is empty
}
//finish
case RESULT_CANCELED :
{
// finish();
}
default: {
//finish();
}
}
之后我需要位图来存储图像。这很奇怪,因为图像很好地保存在画廊中,但我无法得到它......
解决方案
理想情况下,您将使用 Glide、Picasso 或其他图像加载库,只需让它将图像Uri
从ImageView
.
如果您坚持使用基本方法,尽管性能不佳,请替换:
String photoPath = image_uri.toString();
bitmap = BitmapFactory.decodeFile(photoPath);
和:
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(image_uri));
AUri
不是文件。
推荐阅读
- android - Firebase 在 Recyclerview 中获取动态字段值
- ios - ios上的expo不变违反rncsafeareaprovider错误
- scala - Scala:使用无类型、无参数抽象方法从特征中继承案例类
- android - How to modify WearableActionDrawer on runtime?
- android-studio - Android Studio 应用程序文件夹未显示在 Android 视图中
- flutter - 如何实现chart_flutter时间序列中的数据?
- arrays - 需要帮助来解决具有挑战性的数据结构问题
- firebase-realtime-database - 如果我不升级到 blaze 计划并等待 2021 年 1 月 1 日再获得 10GB 会怎样
- html - 显示网格的高度问题
- nginx - 是好还是如果有一些麻烦会发生在 k8s pod 中使用公共文件进行 logrotate ?