android ACTION_IMAGE_CAPTURE плохое качество, если сохранено [дубликат]

Нехорошо о одиночных играх заключается в том, что вы не можете легко их распространять. В основном вы должны создать какой-то узор decorator или что-то подобное, если вы хотите изменить свое поведение. Кроме того, если в один прекрасный день вы хотите иметь несколько способов сделать это, это может быть довольно болезненно для изменения, в зависимости от того, как вы выставляете свой код.

Одно замечание, если вы используете синглтоны, попробуйте передать их тем, кто в них нуждается, вместо того, чтобы им напрямую обращаться к нему ... В противном случае, если вы когда-нибудь захотите использовать несколько способов сделать то, что делает одиночный, это будет довольно сложно изменить, поскольку каждый класс встраивает зависимостей, если он обращается к одиночному элементу напрямую.

Итак, в основном:

public MyConstructor(Singleton singleton) {
    this.singleton = singleton;
}

, а не:

public MyConstructor() {
    this.singleton = Singleton.getInstance();
}

Я считаю, что этот тип шаблона называется инъекции зависимостей и обычно считается хорошей.

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

0
задан Amir Sasani 12 February 2016 в 00:55
поделиться

2 ответа

Используйте что-то, кроме миниатюры. Цитируя документацию для ACTION_IMAGE_CAPTURE с добавленным добавлением:

Вызывающий может передать дополнительный EXTRA_OUTPUT, чтобы контролировать, где будет записываться это изображение. Если EXTRA_OUTPUT не присутствует, изображение небольшого размера возвращается в качестве объекта Bitmap в дополнительное поле. Это полезно для приложений, которым требуется только небольшое изображение. Если EXTRA_OUTPUT присутствует, то полноразмерное изображение будет записано в значение Uri EXTRA_OUTPUT.

Итак, укажите Uri в EXTRA_OUTPUT, где должно быть записано полное изображение камеры. Затем используйте библиотеку загрузки изображений , например Picasso , чтобы загрузить фотографию в ваш ImageView.

Вот пример app , который демонстрирует использование EXTRA_OUTPUT.

2
ответ дан CommonsWare 22 August 2018 в 18:55
поделиться
  • 1
    изображение отображается в ImageView! ссылка – Amir Sasani 14 February 2016 в 04:19
  • 2
    почему я должен использовать библиотеку загрузки изображений? @commonsware – Amir Sasani 19 March 2016 в 13:00
  • 3
    @amir: Если вы хотите управлять фоновым потоком, BitmapFactory.Options#inSampleSize и все это сами, вас обязательно приглашают. Я рекомендую использовать библиотеку загрузки изображений. – CommonsWare 19 March 2016 в 13:01

Вот как я сделал это для меня! Предполагая, что вы захватили изображение и хотите показать захваченное изображение в новом действии, вы можете следовать этому пути:

Сначала нажатием кнопки вы можете:

 public void cameraFuture(View view) // <-- onClick() method of Camera Button
{
    Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File file = new File(Environment.getExternalStorageDirectory(),
            "MyPhoto.jpg");
    outPutfileUri = Uri.fromFile(file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
    startActivityForResult(intent, TAKE_PIC);
}

Затем по методу onActivityResult() вы можете сделать так:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == TAKE_PIC && resultCode==RESULT_OK){
        Toast.makeText(this, outPutfileUri.toString(),Toast.LENGTH_LONG).show();

        Intent bitIntent = new Intent(this, CameraTake.class);
        bitIntent.putExtra("imageUri", outPutfileUri);
        startActivity(bitIntent);
        finish();


    }

}

И в следующем действии вы можете получить файл следующим образом:

Intent receiveIntent = getIntent();

    uri = receiveIntent.getParcelableExtra("imageUri");


    if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if(extras == null) {
            receiveImg= null;
        } else {
            receiveImg= extras.getString("PASSER");
        }
    } else {
        receiveImg= (String) savedInstanceState.getSerializable("PASSER");
    }




    File imgFile = new  File(Environment.getExternalStorageDirectory(),"MyPhoto.jpg");

    if(imgFile.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

        ImageView myImage = (ImageView) findViewById(R.id.camOut);

        myImage.setImageBitmap(myBitmap);

    }

Надеюсь, поможет! Счастливое кодирование:)

1
ответ дан OBX 22 August 2018 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: