2017-07-06 7 views
1

私はXamarin.Androidアプリケーションの電子メールアプリケーションと共有するためにbyte[]イメージを作成しようとしています。これまでのところ、私は以下の持っている:メールで共有するバイト[]イメージを作成する方法

public void ShareAsync(byte[] image, string message) 
{ 
    if (string.IsNullOrEmpty(message) || image == null) 
     return; 

    var sharingIntent = new Intent(); 
    sharingIntent.SetAction(Intent.ActionSend); 
    sharingIntent.SetType("image/*"); 
    sharingIntent.PutExtra(Intent.ExtraStream, image); 
    sharingIntent.AddFlags(ActivityFlags.GrantReadUriPermission); 
    Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity.StartActivity(Intent.CreateChooser(sharingIntent, message)); 
} 

これは、共有ダイアログをポップアップし、私は電子メールのアプリをクリックすることができますが、それは、空メールを返します。

byte[]をメールアプリと共有して、画像が本文や添付ファイルの一部として表示されるようにすることはできますか?

答えて

2

これは画像をバイト配列として受け入れるかどうかによってメールアプリに依存しますが、それは大量のデータを置くことができないという理由で電子メールアプリのほとんどの部分ではうまくいきませんその意図でサイズは1 MBのデータに制限されていますので、メールアプリがこのタイプの画像共有をサポートしていても、いずれの場合でも1 MBを超えるバイト配列を渡すことはできません。

したがって、短い答えはです。方法はありませんです。

+0

これは私が見ている動作のようです。私は添付ファイルとしてuriを渡す他のソリューションを見てきました。それはより実行可能な解決策のように聞こえるか? – user1

+1

@ user1、確かに、(イメージファイルの)uriを渡しても問題なく動作し、正しい解決策です。 –

2

あなたは直接、これは

 Intent share = new Intent(Intent.ACTION_SEND); 
     share.setType("image/*"); 

     share.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_text)); 
     share.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_subject)); 

     share.putExtra(Intent.EXTRA_STREAM, 
       Uri.parse("file:///" + "your image path")); 
     startActivity(Intent.createChooser(share, "Share")); 
0

あなたはこの

Bitmap bm = BitmapFactory.decodeFile("/path/to/image.jpg"); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();

で変換しようとすると、このように画像に戻って変換することができますしようとの意図 にファイルURIを渡すことができます

Bitmap bmp = intent.getExtras().get("data"); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

私はそれをテストしていないので、それが動作すれば教えてください。

0
Bitmap bitmap = BitmapFactory.DecodeStream(ContentResolver.OpenInputStream(IMAGE URI)); 
      using (MemoryStream stream = new MemoryStream()) 
      { 
       bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream); 
       translate.bitmapData = stream.ToArray(); 
      } 

      bitmap.Dispose(); 
関連する問題