низкое качество при захвате изображения и отправке его на просмотр изображения - PullRequest
1 голос
/ 05 февраля 2020

низкое качество при захвате изображения и отправке его на просмотр при нажатии кнопки imgCamera

    case R.id.imgCamera:
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);

                    break;

**the activity result :**

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case CAMERA_REQUEST:
                    mPhotoEditor.clearAllViews();
                    Bitmap photo = (Bitmap) data.getExtras().get("data");
                    mPhotoEditorView.getSource().setImageBitmap(photo);
                    break;
                case PICK_REQUEST:
                    try {
                        mPhotoEditor.clearAllViews();
                        Uri uri = data.getData();
                        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                        mPhotoEditorView.getSource().setImageBitmap(bitmap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    }

помогите мне, я хочу получить лучшее качество для снимок

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Чтобы сохранить полноразмерное изображение, вам нужно сделать гораздо больше.

data.getData ();

Это вернет миниатюру изображения, которая является некачественное изображение для оригинала. Я не могу найти точное руководство, чем официальная документация. проверьте эту ссылку из Android Документация разработчика . После этого вы можете легко сохранить высококачественное изображение вместо некачественного. Не говоря уже о том, что вы узнаете о FileProivder и хранилище (может быть, вы хотите сохранить его во внутреннем хранилище или внешнем хранилище).

Будьте терпеливы ... счастливого кодирования

1 голос
/ 06 февраля 2020

мой комментарий говорит, что вы хотите, это неправильно. Вот решение:

сначала измените намерение вашей камеры:

        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        _photoUri = createImageUri();
        // Continue only if the File was successfully created
        if (_photoUri != null) {
            //setflags is required to clear flag_activity_new_task that is automatically set on
            //direct calls.  If not cleared, you get instant returns from the app.
            takePictureIntent.setFlags(0);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, _photoUri);
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
        }
    }
 private Uri createImageUri() {
    return FileProvider.getUriForFile(this
            , this.getApplicationContext().getPackageName()
            , new File(Environment.getExternalStorageDirectory()
                    , "orderphoto.jpg"));
}

это говорит камере, куда поместить фотографию.

проверьте результат вашей активности для RESULT_OK, чтобы убедитесь, что они не отменили.

Затем вам нужно будет прочитать из файловой системы. Вот как наше приложение делает это: Обратите внимание, я не могу быть уверен, что я не ссылаюсь на пользовательскую функцию в этом. YMMV.

    private Bitmap DecodeFile(Uri fileUri) {
    /* There isn't enough memory to open up more than a couple camera photos */
    /* So pre-scale the target _bitmap into which the file is decoded */

    /* Get the size of the ImageView */
    int targetW = _imageView.getWidth();
    int targetH = _imageView.getHeight();

    /* Get the size of the image */
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(fileUri.getPath(), bmOptions);
    // TODO: 2/25/2019 Update to BitmapFactory.decodeStream()

    int photoW = bmOptions.outWidth;
    int photoH = bmOptions.outHeight;

    if (photoW == 0 || photoH == 0) {
        AppUtility.ShowToast("BitmapFactory.Decode: File Decoding Failed!");
    }

    /* Figure out which way needs to be reduced less */
    int scaleFactor = 1;
    if ((targetW > 0) || (targetH > 0)) {
        scaleFactor = Math.min(photoW/targetW, photoH/targetH);
    }

    /* Set _bitmap options to scale the image decode target */
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inSampleSize = scaleFactor;
    bmOptions.inPurgeable = true;

    /* compress/shrink the bitmap */
    // TODO: 2/25/2019 Update to BitmapFactory.decodeStream()
    return BitmapFactory.decodeFile(fileUri.getPath(), bmOptions);
}

Когда вы используете это, он выполняет всю тяжелую работу за вас и выводит его на экран. Обратите внимание, что некоторые устройства Samsung имеют ie об ориентации, поэтому у вас могут возникнуть проблемы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...