Android Bitmap.Compress сохраняет изображение низкого качества и уменьшенное изображение - PullRequest
0 голосов
/ 24 сентября 2019

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

Я пытаюсь сохранить изображение из растрового изображения, полученного от onActivityResult, для намерения камеры.Но после использования следующего кода изображения уменьшаются и слишком сильно сжимаются и выглядят плохо.Может ли кто-нибудь помочь мне сохранить качество и размер изображения?

Вот изображения, сохраненные приложением:

image image

   public void saveBitmapToGallery(Bitmap bm,String picturename){
        String root = Environment.getExternalStorageDirectory().toString();
        File mydir = new File(picturepath);
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        displayheight = dm.heightPixels;
        displaywidth = dm.widthPixels;
        File file = new File(mydir, picturename+".JPG");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bm.createScaledBitmap(bm,displaywidth,displayheight,true);
            bm.compress(Bitmap.CompressFormat.JPEG,100, fos);
            fos.flush();
            fos.close();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }

    }

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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Ну, я понял, что не так с выходным изображением.Нам нужно использовать EXTRA_OUTPUT для сохранения изображения в полном размере, в противном случае сохраняется только миниатюра.

Вот что нам нужно сделать перед началом работы камеры для результата

if (picturefile != null) {
                Uri pictureUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() +
                        ".provider", picturefile);
                imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); //This makes the image to save in full rather than just a low quality scaled-down thumbnail.
            }

            startActivityForResult(imageIntent, REQUEST_IMAGE_CAPTURE);
0 голосов
/ 24 сентября 2019

изображение не преобразовано в байтовый вывод

также, перейдите на Мой профиль Github для этого https://github.com/axarlotwala/CafeDelearenter кода здесь

// с помощью намеренного выбора файловoption

private void ShowFileChooser() {

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,"Select Picture"),PICK_IMAGE_REQUEST);

}

// показать выбранное и изображение пути в viewview

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    PATH = data.getData();

    try {
        bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),PATH);
        cat_image.setImageBitmap(bitmap);
        tv_path.setText("Path : " .concat(GetPath(PATH)));


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

}

//get correct path of image
private String GetPath(Uri uri){

    String result;
    Cursor cursor = getActivity().getContentResolver().query(uri,null,null,null,null);
    if (cursor == null){
        result = uri.getPath();
    }else {

        cursor.moveToFirst();
        int id = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
        result = cursor.getString(id);
        cursor.close();
    }

    return result;
}
...