如何从全尺寸的相机拍摄照片? (Android Java)

时间:2017-10-05 18:07:05

标签: android photo

我无法从相机拍摄照片,然后将其存储为Bitmap对象。我只能找到解决方案,我将缩略图作为Bitmap。我怎样才能做到这一点?

以下是代码:

public boolean pickImageFromCamera(View View) {

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photo;
    try
    {
        // place where to store camera taken picture
        photo = this.createTemporaryFile("picture", ".jpg");
        photo.delete();
    }
    catch(Exception e)
    {

        System.out.println("ERROR TAKING PICTURE");
        return false;
    }
    mImageUri = Uri.fromFile(photo);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
    //start camera intent
    activity.startActivityForResult(intent, REQUEST_CODE2);


    return true;
}


private File createTemporaryFile(String part, String ext) throws Exception
{
    File tempDir= Environment.getExternalStorageDirectory();
    tempDir=new File(tempDir.getAbsolutePath()+"/.temp/");
    if(!tempDir.exists())
    {
        tempDir.mkdirs();
    }
    return File.createTempFile(part, ext, tempDir);
}

public void pickImageFromFolder(View View) {
    Intent pickPhoto = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(pickPhoto , REQUEST_CODE);//one can be replaced with any action code
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE2 && resultCode == Activity.RESULT_OK)
        try {
            // We need to recyle unused bitmaps
            if (bitmap != null) {
                bitmap.recycle();
            }

            Bitmap bitmap = null;

            this.getContentResolver().notifyChange(mImageUri, null);
            ContentResolver cr = this.getContentResolver();
            try
            {
                bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri);
                imageView.setImageBitmap(bitmap);
            }
            catch (Exception e)
            {
                System.out.println("Failed to load");
            }

            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);

            this.UPLOAD_URL = Config.webSiteUrl + "?action=uploadFile&username=" + this.username + "&password=" + this.password + "&baustelleid=" + Fotos.this.baustelleid;


            if(bitmap != null) {
                uploadImage(bitmap, this.UPLOAD_URL);
            }
        } catch (Exception e) {
            System.out.println("Fehler 1");
        }

    super.onActivityResult(requestCode, resultCode, data);
}

最终以System.out.println结束("错误拍摄图片");似乎没有写入存储的权限。我怎么能改变这个?

2 个答案:

答案 0 :(得分:1)

位图 onActivityResult

之后,在按钮等中调用此方法
 private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        File photoFile = null;
        File photoThumbnailFile = null;
        try {
            photoFile = createImageFile(); 
        } catch (IOException ex) {

        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            photoURI = FileProvider.getUriForFile(this,
                    "com.example.yourfileprovider",
                    photoFile);

            photoThumbnailURI = FileProvider.getUriForFile(this,
                    "com.example.yourfileprovider",
                    photoThumbnailFile);

            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

        }
    }
}

此方法将创建文件

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}

当相机完成拍照时会发生此方法

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Toast.makeText(this, "Image saved", Toast.LENGTH_SHORT).show();

            bitmap = null;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photoURI);
                mImageView.setImageBitmap(bitmap);

                } catch (IOException e) {
                    e.printStackTrace();
                } 
            }
        }

答案 1 :(得分:0)

您将获得一个位图,但您可以获得整个位图,而不仅仅是缩略图。 你试过这个答案吗? https://stackoverflow.com/a/6449092/4127441