2017-09-22 54 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。