如何创建一个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的字节数组。
所以,简单的答案是没有办法。
答
您可以直接传递文件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();
这听起来像我看到的行为。我已经看到其他解决方案通过uri作为附件。这听起来像是一个更可行的解决方案吗? – user1
@ user1,当然,传递uri(图像文件的)将起作用,并且是一个正确的解决方案。 –