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

How can I take a photo from Camera with full size? (Android Java)

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

代码如下:

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("ERROR TAKING PICTURE")结束;似乎没有写入存储的权限。我该如何更改?

您将获得一张位图,但您可以获得整个位图,而不仅仅是缩略图。 你试过这个答案吗?

在按钮等中调用此方法,然后得到 位图 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();
                } 
            }
        }