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相同的问题