2017-02-28 19 views
0

私はAndroidスタジオに画像フィルタアプリを作成しています。最初に、ユーザはギャラリーから画像を選択し、画像ビューに表示される。ユーザーが編集ボタンをクリックすると、その画像が次のアクティビティの画像ビューに表示され、フィルタを追加できます...低解像度の画像では問題なく動作しますが、高解像度の画像を選択すると最初の画像ビューに表示されますが、ボタンをクリックすると、アプリがクラッシュするか、選択した最後の画像が表示されます。ソリューションを検索しましたが見つかりませんでした。誰もがこの問題を解決する方法を知っている場合私を助けてください高解像度画像をあるアクティビティから別のアクティビティに渡す

答えて

0

インテントで渡すことができるデータのサイズには制限があります。制限はroughly 500Kbです。あなたの高解像度の写真はこれより大きくなります。

イメージをデバイス上のファイルの場所に保存し、受信アクティビティにURIを渡してそこに読み込むことを検討してください。

0

最初のペーストクラッシュログ。 画像そのものを渡すのではなく、画像のパスを渡すだけです。 または編集ツールとmainViewを1つのアクティビティに追加して編集ツールを見えなくしてください!しかし、フラグメントも使えます。

0

URIパスを送信するputExtraでの使用:

Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent .setClass(ThisActivity.this, NewActivity.class); 
      intent .putExtra("KEY", Uri); 
      startActivity(intent); 

あなただけのイメージのパスを追加する必要があります。

0

画像を保存する代わりに、画像を渡す代わりに場所のUriを渡す方が良いでしょう。ストレージ内

画像の保存: - 今

public static Uri saveImageOnExternalStorage(Bitmap capturedBitmap, String imageId) { 
    if (null != capturedBitmap) { 

     OutputStream fOutputStream; 

     String path = Environment.getExternalStorageDirectory().toString(); 
    File file = new File(path + "temp", mediaId + ".png"); 
     file.delete(); 
     if (!file.getParentFile().exists()) { 
      file.getParentFile().mkdirs(); 
     } 
     try { 
      if (file.createNewFile()) { 
       fOutputStream = new FileOutputStream(file); 

       capturedBitmap.compress(COMPRESS_FORMAT, 100, fOutputStream); 

       fOutputStream.flush(); 
       fOutputStream.close(); 

       return Uri.fromFile(file); // return saved image path on external storage 
      } 
     } catch (FileNotFoundException e) { 
      Log.e(TAG,e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.e(TAG,e.getMessage()); 
     } 
    } 
    return null; 
} 

同じウリあなたは次の活動の趣旨に渡すことができます -

Intent intent = new Intent(CurrentActivity.this, LaunchActivity.class); 
      intent .putExtra("image_key", Uri); 
      startActivity(intent); 
関連する問題