如何创建一个byte []图像意图用电子邮件

问题描述:

我想创建一个byte[]图像意图与我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[],使图像显示为正文或附件的一部分?

这取决于电子邮件应用程序是否会接受图像作为字节数组,我敢肯定不会为电子邮件应用的大部分工作,为的原因,你不能把大量的数据在意图。它的大小限制为数据的1 MB,因此即使电子邮件应用程序支持此类图像共享,您也无法在任何情况下传递大于1 MB的字节数组。

所以,简单的答案是没有办法

+0

这听起来像我看到的行为。我已经看到其他解决方案通过uri作为附件。这听起来像是一个更可行的解决方案吗? – user1

+1

@ user1,当然,传递uri(图像文件的)将起作用,并且是一个正确的解决方案。 –

您可以直接传递文件URI的意图 试试这个

 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")); 

你可以试试这个

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

转换和转换回图像这样

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

我没有测试过,所以让我知道它是否有效。

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