从相机捕获的图像被视为 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 中设置图像? [复制]

ImageView 未显示在 android 中使用相机捕获的图像

底部带有相机按钮的 ImageView

Android Lollipop 问题 - 无法将图像从相机加载到 ImageView

相机图像未显示在 ImageView 中