Низкое качество изображения / изображения при захвате с камеры

У меня есть одна проблема. Когда я пытаюсь получить изображение с камеры, качество очень низкое. Сначала сделайте снимок с помощью камеры, затем сохраните его в каталоге и одновременно получите это изображение и покажите в моем приложении. Изображение, сохраненное в каталоге, имеет хорошее качество, но когда я получаю его из каталога, качество низкое. ниже мой пример кода:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (requestCode == CAMERA_PIC_REQUEST) {  

        Bitmap thumbnail = (Bitmap) intent.getExtras().get("data");

        if (g==1)
        {
            ImageView myImage = (ImageView) findViewById(R.id.img5);
            myImage.setImageBitmap(thumbnail);

            View a = findViewById(R.id.img5);
            a.setVisibility(View.VISIBLE);

            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, stream);

            byteArray1 = stream.toByteArray();
        }
}

какое-либо решение / предложение? Спасибо:)

решаемая

Проблема решается, когда я следую коду, указанному Antrromet ниже

4 ответа

Решение

Я использовал следующий код, и это прекрасно работает для меня.

            values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "New Picture");
            values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera");
            imageUri = getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            startActivityForResult(intent, PICTURE_RESULT);

а также

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

        case PICTURE_RESULT:
            if (requestCode == PICTURE_RESULT)
                if (resultCode == Activity.RESULT_OK) {
                    try {
                        thumbnail = MediaStore.Images.Media.getBitmap(
                                getContentResolver(), imageUri);
                        imgView.setImageBitmap(thumbnail);
                        imageurl = getRealPathFromURI(imageUri);    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
        }
    }

а также

public String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

Я дам вам то, что работает для меня. Я спросил то же самое!

Решение сохранить картинку в определенную папку без потери качества

Я НАШЕЛ РЕШЕНИЕ:

//Создать новый код папки:

 String path = String.valueOf(Environment.getExternalStorageDirectory()) + "/your_name_folder";
            try {
                File ruta_sd = new File(path);
                File folder = new File(ruta_sd.getAbsolutePath(), nameFol);
                boolean success = true;
                if (!folder.exists()) {
                    success = folder.mkdir();
                }
                if (success) {
                    Toast.makeText(MainActivity.this, "Carpeta Creada...", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception ex) {
                Log.e("Carpetas", "Error al crear Carpeta a tarjeta SD");
            }

            Intent i = new Intent(MainActivity.this, MainActivity.class);
            startActivity(i);
            finish();//agregue este

//Способ сделать снимок

public void clickFoto(View view) {
        takePic();
    }

//takePic ()

 private void takePic() {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        *File file = new File(Environment.getExternalStorageDirectory(), "/your_name_folder/a" + "/photo_" + timeStamp + ".png");*
        imageUri = Uri.fromFile(file);

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intent, PICTURE_RESULT);
    }

//onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {

            case PICTURE_RESULT:
                if (requestCode == PICTURE_RESULT)
                    if (resultCode == Activity.RESULT_OK) {
                        try {
                            Bitmap thumbnail = MediaStore.Images.Media.getBitmap(
                                    getContentResolver(), imageUri);
                            imgFoto.setImageBitmap(thumbnail);
                            imageurl = getRealPathFromURI(imageUri);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
        }
    }

// getRealPathFromUri

public String getRealPathFromURI(Uri contentUri) {
        String[] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

Котлин:

ОбъявитьimageUriвыше

      private lateinit var imageUri: Uri

Объявить послеonCreate()

      private fun captureFromCamera() {
    val values = ContentValues()
    imageUri = mContext.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)!!
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
    startActivityForResult(intent, 1000)
}

ОбъявитьonActivityResult()послеcaptureFromCamera()

      override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    when (requestCode) {
        1000 -> if (resultCode == RESULT_OK) {
            try {
                val thumbnail = MediaStore.Images.Media.getBitmap(mContext.contentResolver, imageUri)
                imageView.setImageBitmap(thumbnail)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
}

Фотография будет храниться в папке «Изображения» галереи вашего телефона.

Добавьте фото в галерею..

private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(currentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);

}

для более подробной информации: https://developer.android.com/training/camera/photobasics.html

Другие вопросы по тегам