2017-09-22 65 views
1

我正在拍照並保存爲緩存中的圖像。我也將圖片命名並保存,以便稍後查找。在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寬的圖像是像素化的。

任何想法? 謝謝

+0

我很困惑。有什麼讓你覺得這是Couchbase Lite的問題嗎?就CBL而言,圖像只是一個二進制塊,所以它不會與壓縮或任何東西混淆。您是否檢查過您正在進行的其他處理(photo.compress或MediaStore)沒有更改圖像? – Hod

+0

我不確定該過程的哪一部分會降低分辨率。這讓我想起我如何看待圖像。我正在使用angularjs和pouchdb從couchbase服務器檢索圖像的Web應用程序中查看圖像。我如何檢查大小或在過程中查看圖像?感謝您的幫助。 –

+0

我會首先使用檢查工具來查看在瀏覽器中呈現的圖像實際上有多大。這似乎是最可能的問題。否則,我會檢查圖像在不同點上的字節大小。我猜想的第二個最可能的問題是getPhotoFromStorage返回的內容。您的照片可能未按照您的預期保存。 – Hod

回答

0

正如其他評論者所猜測的,這個問題與Couchbase無關。 ACTION_IMAGE_CAPTURE的文檔指出,只有

在額外字段中將小圖像作爲位圖對象返回。

要獲得完整大小的圖像,您需要傳遞想要Intent寫入圖像的位置。這會讓您的代碼變得更簡單,這會帶來快樂的副作用。您可以簡單地打開FileInputStream並將其傳遞給Couchbase。