Как использовать растровое изображение для сжатия изображения без снижения качества, получаемого с камеры? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть 3 изображения, снятые с камеры, и я хочу установить 3 ImageView. Но он выбрасывает OutOfMemory, потому что изображение имеет большой размер. Я читал, что фабрика растровых изображений может сжимать размер без снижения качества. Проблема в том, что я не знаю, как это сделать.

Это моя кнопка onClick:

openCameraButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    file = new File(Environment.getExternalStorageDirectory(),
                            "imagename.jpg");
                    outPutfileUri = Uri.fromFile(file);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
                    startActivityForResult(intent,0);
                    dialog.cancel();
                }
            });

А это мой onActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        //result from camera
    try{
        if (requestCode==0 && resultCode==RESULT_OK){
            //bitmap = (Bitmap)data.getExtras().get("data");
            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), outPutfileUri);
            drawable = new BitmapDrawable(getResources(), bitmap);
            imageSelfie.setImageDrawable(drawable);
        }
    } catch (Exception ignored){}}

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

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

InputStream is = getContentResolver().openInputStream(outPutfileUri);

Затем используйте BitmapFactory.decodeStream () с параметром параметров, где вы уменьшаете изображение до нескольких раз.

0 голосов
/ 15 мая 2018

Используйте вот так:

File file = new File(Environment.getExternalStorageDirectory(),"imagename.jpg");
fileDeleted = !file.exists() || file.delete();
if (fileDeleted) {
FileOutputStream out = new FileOutputStream(file);
if (imageToSave != null) {
imageToSave.compress(Bitmap.CompressFormat.JPEG, 65, out);
}}
out.flush();
out.close();
...