从相机捕获的图像被视为 ImageView 对象的问题。 - 安卓
Posted
技术标签:
【中文标题】从相机捕获的图像被视为 ImageView 对象的问题。 - 安卓【英文标题】:Issues getting captured imaged from Camera to be viewed as an ImageView object. - Android 【发布时间】:2020-08-03 17:14:06 【问题描述】:我想创建一个应用程序,当用户单击按钮时,它会将您带到手机的默认相机应用程序,捕获图片并将其带回活动的 imageview 对象以显示在活动中。下面是我的代码。
问题:问题是图像未显示在图像视图中。拍照后返回activity,但不显示。
androidManifest.xml 添加了以下内容:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" android:required="true" />
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.application.hidden.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
file_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="my_images" path="/" />
</paths>
MainActivity.java
private File createImageFile() throws IOException
String timeStamp =
new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp + "_";
File storageDir = this.getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
".jpg",
storageDir
);
imagePath = image.getAbsolutePath();
return image;
@OnClick(R.id.takePicture, R.id.pic)
void onTakePic()
changeImageLayout.setVisibility(GONE);
System.out.println("Setting up for capture, clicked on camera");
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(pictureIntent.resolveActivity(getActivity().getPackageManager()) != null)
//Create a file to store the image
File photoFile = null;
try
photoFile = createImageFile();
catch (IOException ex)
if(photoFile != null)
Uri photoURI = FileProvider.getUriForFile(this.getContext(),"com.application.hidden.provider", photoFile);
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(pictureIntent, RESULT_LOAD_CAMERA_IMG);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
case RESULT_LOAD_CAMERA_IMG:
switch (resultCode)
case Activity.RESULT_OK:
Glide.with(this).load(imagePath).into(listingImage);
break;
case Activity.RESULT_CANCELED:
isNewImageAdded = false;
break;
default:
break;
break;
default:
break;
不胜感激任何建议或帮助!
谢谢。
【问题讨论】:
【参考方案1】:您需要将文件路径转换为文件对象,使用 new File(imagepath),而不仅仅是 glide 中的 imagepath。
【讨论】:
不幸的是,图像仍然没有显示给我。【参考方案2】:我认为您正在尝试从相机捕获图像并将其存储在本地内存中,然后从内存中加载。
如果您只想在 imageview 中显示捕获的图像,请按照以下方式操作。
对于打开的相机:
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
然后在onActivityResult结果中:
if (requestCode == 7 && resultCode == RESULT_OK)
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(bitmap);
【讨论】:
以上是关于从相机捕获的图像被视为 ImageView 对象的问题。 - 安卓的主要内容,如果未能解决你的问题,请参考以下文章
如何从图库和相机的 imageview 中设置图像? [复制]
ImageView 未显示在 android 中使用相机捕获的图像