【问题标题】:How do I use an image that i captured using the camera and set that to an ImageView?如何使用我使用相机拍摄的图像并将其设置为 ImageView?
【发布时间】:2017-06-22 06:47:09
【问题描述】:

我正在使用以下代码从相机中捕获图像并将其存储在公共目录图片中。如何使用相同的图像并将其设置为在 ImageView 中?

public void take_photo(){
    if (ActivityCompat.checkSelfPermission(Contact_info.this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.CAMERA},40);
        }
        return;
    }
    Intent cameraIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (ActivityCompat.checkSelfPermission(Contact_info.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},50);
        }
        return;
    }
    File pictureDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    String pictureName = "Image1.jpg";
    File imageFile = new File(pictureDirectory, pictureName);
    Uri pictureUri;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        pictureUri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", imageFile);

    } else{
        pictureUri = Uri.fromFile(imageFile);
    }
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);
    startActivityForResult(cameraIntent, CAMERA_REQUEST);
}

我的活动结果代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==RESULT_OK){
        if(requestCode==CAMERA_REQUEST){
             //Commented since upon using this and trying to save the image in the file, the app crashes giving a null pointer exception
            //Bitmap cameraImage =(Bitmap) data.getExtras().get("data");
            //contact_image.setImageBitmap(cameraImage);
        }
    }
}

我不想知道如何在 ImageView 中设置图像,我想知道如何将相机拍摄并存储在手机目录中的图像用作 ImageView 中的图像

【问题讨论】:

标签: java android android-camera android-camera-intent


【解决方案1】:
public void takePicture() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        mCapturedImageURI = Uri.fromFile(getOutputMediaFile());
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

        startActivityForResult(intent, 2);
    }

    private static File getOutputMediaFile(){
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "CameraDemo");

        if (!mediaStorageDir.exists()){
            if (!mediaStorageDir.mkdirs()){
                return null;
            }
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        return new File(mediaStorageDir.getPath() + File.separator +
                "IMG_"+ timeStamp + ".jpg");
    }

从上述方法获得的 mcapturedUri 中设置图像,希望您正在处理权限和结果部分

【讨论】:

    【解决方案2】:

    在你的活动中尝试这个以获得结果

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
        }  
    } 
    

    【讨论】:

    • 应用程序崩溃并给出 NullPointerException:尝试在空对象引用上调用虚拟方法 'android.os.Bundle android.content.Intent.getExtras()'
    • 请粘贴您的 onactivity 以获取结果
    【解决方案3】:

    这是完整的工作代码:

    私人无效 dispatchTakePictureIntent() {
            意图选择器意图 = 新意图(MediaStore.ACTION_IMAGE_CAPTURE);
            文件 f = Utils.createImageFile(getContext());
            chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
            photoURI = Uri.fromFile(f);
            startActivityForResult(chooserIntent, REQUEST_PHOTO_CAMERA);
    
    
        }
    
        私人无效 checkCameraPermission() {
            如果(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
                    if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
    
                        新的 AlertDialog.Builder(getContext())
                                .setMessage(getString(R.string.camera_request_cancelled))
                                .setPositiveButton(R.string.dismiss, null)
                                .setOnDismissListener(对话框-> requestPermissions(
                                        新字符串[]{Manifest.permission.CAMERA},PERMISSIONS_REQUEST_CAMERA))
                                。显示();
                    } 别的 {
                        requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAMERA);
                    }
                } 别的 {
                    dispatchTakePictureIntent();
                }
            } 别的 {
                dispatchTakePictureIntent();
            }
        }
    
        @覆盖
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] 权限,
                                               @NonNull int[] grantResults) {
            开关(请求代码){
                案例PERMISSIONS_REQUEST_CAMERA:{
                    // 如果请求被取消,结果数组为空。
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        dispatchTakePictureIntent();
                    }
                }
                休息;
            }
        }
    
        @覆盖
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            /*if (requestCode == REQUEST_PHOTO_CAMERA && resultCode == getActivity().RESULT_OK) {
                捆绑附加服务 = data.getExtras();
                位图 imageBitmap = (Bitmap) extras.get("data");
                收据Image.setImageBitmap(imageBitmap);
                保存照片(图像位图);
    
            }
    */
            if (requestCode == REQUEST_PHOTO_CAMERA && resultCode == Activity.RESULT_OK) {
                如果(照片URI!= null){
                    Uri selectedImage = photoURI;
                    getActivity().getContentResolver().notifyChange(selectedImage, null);
                    位图 reduceSizeBitmap = Utils.getBitmap(photoURI.getPath());
                    if (reducedSizeBitmap != null) {
                        收据Image.setImageBitmap(reducedSizeBitmap);
                        savePhoto(reducedSizeBitmap);
                    } 别的 {
                        Toast.makeText(getContext(), "捕获图像时出错", Toast.LENGTH_SHORT).show();
                    }
                } 别的 {
                    Toast.makeText(getContext(), "捕获图像时出错", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        私人无效保存照片(位图位图){
            FileOutputStream outputStream = null;
            文件文件=空;
            尝试 {
                file = File.createTempFile("照片", null, getContext().getCacheDir());
                outputStream = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
                photoURI = Uri.fromFile(file);
    
            } 捕捉(IOException e){
            } 最后 {
                尝试 {
                    如果(输出流!= null){
                        outputStream.close();
                    }
                } 捕捉(IOException e){
                }
            }
    
            上传图片(文件);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多