Сохранение изображений с высоким разрешением в Couchbase Lite

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

if ((requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK)){
        Bitmap photo = (Bitmap) intent.getExtras().get("data");

        //save photo
        Date dTime = new Date();
        String pictureName = String.valueOf(dTime.getTime()).substring(1,10);
        // saved in internal program cache storage
        String extr = getCacheDir().toString();
        File myPath = new File(extr, "DVIR");

        if (!myPath.exists()) {
            myPath.mkdirs();
        }
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(myPath + "/" + pictureName + ".png");
            assert photo != null;
            photo.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.flush();
            fos.close();
            MediaStore.Images.Media.insertImage(getContentResolver(),
                    photo, myPath.getPath(), pictureName + ".png");

            photos.add(pictureName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Toast toast = Toast.makeText(getApplicationContext(),
                    String.valueOf(e), Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast toast = Toast.makeText(getApplicationContext(),
                    String.valueOf(e), Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }

Получая изображение и сохраняя его в виде документа, имена изображений сохраняются в массиве photos[].

try {
        assert document != null;
        document.putProperties(properties);
        if(photos.size()>0) {
            String pName;
            for(int i=0;i<photos.size();i++){
                pName = photos.get(i);
                UnsavedRevision newRev = document.getCurrentRevision().createRevision();
                newRev.setAttachment(pName + ".png", "image/png", getphotoFromStorage(pName));
                newRev.save();
            }

        }
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
        Toast toast = Toast.makeText(getApplicationContext(),
                "Save Failed" + e, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

Когда я получаю фото, изображение шириной 400px пикселируется.

Есть идеи? Спасибо

1 ответ

Как предположили другие комментаторы, проблема не связана с Couchbase. Документация для ACTION_IMAGE_CAPTURE гласит, что только

небольшое изображение возвращается как растровое изображение в дополнительном поле.

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

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