2017-09-22 4 views
1

Ich mache ein Foto und speichern Sie als Bild im Cache. Ich nenne auch das Bild und speichere den Namen, um ihn später zu finden.Speichern Hi Auflösung Bilder in 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(); 
     } 

Bild wird abgerufen und als Dokumentanhang gespeichert, Bildnamen werden im Array fotos [] gespeichert.

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(); 
    } 

Wenn ich ein Foto abrufe, ist ein 400 Pixel breites Bild pixelig.

Irgendwelche Ideen? Danke

+0

Ich bin verwirrt. Gibt es etwas, das Sie denken lässt, dass dies ein Problem mit Couchbase Lite ist? Soweit es CBL betrifft, ist das Bild nur ein binärer Fleck, so dass es nicht mit der Komprimierung oder irgendetwas zu tun hat. Haben Sie überprüft, dass das Bild nicht von der anderen Bearbeitung (photo.compress oder MediaStore) geändert wird? – Hod

+0

Ich bin mir nicht sicher, welcher Teil des Prozesses die Auflösung reduziert. Das erinnert mich daran, wie ich das Bild betrachte. Ich betrachte das Bild in einer Web-App, die angularjs und pouchdb verwendet, um das Bild vom Couchbase-Server abzurufen. Wie kann ich die Größe überprüfen oder das Bild in der Mitte des Prozesses sehen? Danke für deine Hilfe. –

+0

Ich würde mit Inspektionstools beginnen, um zu sehen, wie groß das Bild tatsächlich ist, wenn es im Browser gerendert wird. Dies scheint das wahrscheinlichste Problem zu sein. Ansonsten würde ich an verschiedenen Stellen die Größe in Bytes des Bildes überprüfen. Das zweithäufigste Problem, das ich vermutete, ist das, was von getPhotoFromStorage zurückgegeben wird. Ihr Foto wurde möglicherweise nicht so gespeichert, wie Sie es erwartet haben. – Hod

Antwort

0

Wie die anderen Kommentatoren vermutet haben, hat das Problem nichts mit Couchbase zu tun. In der Dokumentation für wird angegeben, dass nur ein kleines Bild als Bitmap-Objekt im zusätzlichen Feld zurückgegeben wird.

Um das Bild in voller Größe zurück zu bekommen, müssen Sie den Speicherort übergeben, an dem der Intent das Bild schreiben soll. Dies hat den glücklichen Nebeneffekt, Ihren Code viel einfacher zu machen. Sie können einen FileInputStream einfach öffnen und an Couchbase übergeben.

Verwandte Themen