C# 将图像转换为基本64字符串xamarin

C# 将图像转换为基本64字符串xamarin,c#,xamarin.forms,C#,Xamarin.forms,我是按照这个指南来的 异步void OnPickPhotoButtonClicked(对象发送方,事件参数e) { (发送方为图像)。IsEnabled=false; Stream=等待DependencyService.Get().GetImageStreamAsync(); if(流!=null) { temp_photo.Source=ImageSource.FromStream(()=>stream); } (发送方为图像)。IsEnabled=true; } 当我使用此选项选择图像时

我是按照这个指南来的

异步void OnPickPhotoButtonClicked(对象发送方,事件参数e)
{
(发送方为图像)。IsEnabled=false;
Stream=等待DependencyService.Get().GetImageStreamAsync();
if(流!=null)
{
temp_photo.Source=ImageSource.FromStream(()=>stream);
}
(发送方为图像)。IsEnabled=true;
}
当我使用此选项选择图像时,它将在

我需要做的是将图像转换为base64_字符串,以便将其发送到我们的服务器

我试着从这个链接中找到公认的答案

var stream=file.GetStream();
var bytes=新字节[stream.Length];
wait stream.ReadAsync(字节,0,(int)stream.Length);
string base64=System.Convert.ToBase64字符串(字节);
采用我的方法,看起来像这样

异步void OnPickPhotoButtonClicked(对象发送方,事件参数e)
{
(发送方为图像)。IsEnabled=false;
Stream=等待DependencyService.Get().GetImageStreamAsync();
if(流!=null)
{
temp_photo.Source=ImageSource.FromStream(()=>stream);
var bytes=新字节[stream.Length];
wait stream.ReadAsync(字节,0,(int)stream.Length);
string base64=System.Convert.ToBase64字符串(字节);
}
(发送方为图像)。IsEnabled=true;
}
但在选择图像时,这会导致应用程序崩溃

如何将所选图像转换为base64字符串

作为参考,我正在android设备上测试

编辑:将我的方法包装在一个try块中以捕获异常,它就是这么说的


不支持指定的方法。

请尝试将steam复制到新的
内存流中,如下所示:

async void OnPickPhotoButtonClicked(object sender, EventArgs e)
    {

        Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();
        if (stream != null)
        {
            using (MemoryStream memory = new MemoryStream())
            {
                stream.CopyTo(memory);
                byte[] bytes = memory.ToArray();
                image.Source = ImageSource.FromStream(() => new MemoryStream(bytes));
                string base64 = System.Convert.ToBase64String(bytes);
            }

        }

        (sender as Button).IsEnabled = true;
    }
public static class StreamExtensions
{
    public static string ConvertToBase64(this Stream stream)
    {
        var bytes = new Byte[(int)stream.Length];

        stream.Seek(0, SeekOrigin.Begin);
        stream.Read(bytes, 0, (int)stream.Length);

        return Convert.ToBase64String(bytes);
    }
}


try {

    var base64String = stream.ConvertToBase64();

} catch (Exception ex){

    Console.WriteLine(ex.message);

}
异步void OnPickPhotoButtonClicked(对象发送方,事件参数e)
{
Stream=等待DependencyService.Get().GetImageStreamAsync();
if(流!=null)
{
使用(MemoryStream memory=new MemoryStream())
{
stream.CopyTo(内存);
byte[]bytes=memory.ToArray();
image.Source=ImageSource.FromStream(()=>newmemoryStream(字节));
string base64=System.Convert.ToBase64字符串(字节);
}
}
(发送者为按钮)。IsEnabled=true;
}

试试看。

public static class StreamExtensions
{
    public static string ConvertToBase64(this Stream stream)
    {
        var bytes = new Byte[(int)stream.Length];

        stream.Seek(0, SeekOrigin.Begin);
        stream.Read(bytes, 0, (int)stream.Length);

        return Convert.ToBase64String(bytes);
    }
}


try {

    var base64String = stream.ConvertToBase64();

} catch (Exception ex){

    Console.WriteLine(ex.message);

}

对于任何崩溃,您需要做的第一件事是识别导致崩溃的异常。在你这么做之前我们帮不了你。然而,我会注意到XF有一个媒体插件,它消除了使用DependencyService的需要approach@Jason更新了帖子,但有例外哪一行导致了这种情况?它现在可以工作了吗?这会阻止应用程序崩溃,但现在base64=Xamarin.Forms。StreamImageSource@MysteryMan你不能得到base64吗?我可以正确地得到base64这也会阻止应用程序崩溃,但会产生与上述base64string=Xamarin.Forms.StreamImageSource相同的问题