2017-09-22 13 views
1

私は写真を撮って、キャッシュに画像として保存しています。私はまた、イメージに名前をつけて、後で見つけるために名前を保存します。Couchbaseライトで高解像度の画像を保存する

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

写真を取得すると、400ピクセル幅の画像がピクセル化されます。

アイデア? ありがとう

+0

私は混乱しています。これがCouchbase Liteの問題だと思うものがありますか? CBLに関する限り、イメージはバイナリBLOBなので、圧縮などを邪魔しているわけではありません。他の処理(photo.compressまたはMediaStore)でイメージが変更されていないことを確認しましたか? – Hod

+0

プロセスのどの部分が解像度を下げているかわかりません。それは私がどのようにイメージを見ているかを思い出させる。私は、anglejsとpouchdbを使用してcouchbaseサーバーから画像を取得するWebアプリケーションで画像を表示しています。プロセスの途中でイメージを確認するにはどうしたらいいですか?ご協力いただきありがとうございます。 –

+0

私は検査ツールを使用して、ブラウザでレンダリングしたときにイメージの実際の大きさを確認することから始めます。これは最も可能性の高い問題です。さもなければ、私はさまざまなポイントでイメージのバイト単位でサイズをチェックします。私が推測している可能性のある2番目の問題は、getPhotoFromStorageによって返されるものです。あなたの写真はあなたが期待していた方法で保存されていない可能性があります。 – Hod

答えて

0

他のコメント者も推測しているように、問題はCouchbaseとは無関係です。 ACTION_IMAGE_CAPTUREのドキュメントでは、

という特殊なイメージが追加フィールドにBitmapオブジェクトとして返されると記載されています。

フルサイズの画像を戻すには、インテントに画像を書き込む場所を渡す必要があります。これは、コードをもっと簡単にするという幸いな副作用があります。 FileInputStreamを簡単に開き、Couchbaseに渡すことができます。

関連する問題