从 byte[] 在 Xamarin 上显示图像
Show a Image on Xamarin from byte[]
我在这里看到了很多例子,我正在努力适应我的代码!但是,当图像出现时,它变成空白......
我只想在单击按钮后显示图像。不是为了保存在智能手机上。
.cs代码:
ApiCall apiCallFoto = new ApiCall();
ImageSource imagem = null;
btnFoto.Clicked += async (sender, e) =>
{
await apiCallFoto.GetFoto<byte[]>("Nomes", "Foto", envolvID).ContinueWith(t =>
{
//Aqui verificamos se houve problema ne requisição
if (t.IsFaulted)
{
Debug.WriteLine(t.Exception.Message);
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Falha", "Ocorreu um erro na Requisição :(", "Ok");
});
}
//Aqui verificamos se a requisição foi cancelada por algum Motivo
else if (t.IsCanceled)
{
Debug.WriteLine("Requisição cancelada");
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Cancela", "Requisição Cancelada :O", "Ok");
});
}
//Caso a requisição ocorra sem problemas, cairemos aqui
else
{
//Se Chegarmos aqui, está tudo ok, agora itemos tratar nossa Lista
Device.BeginInvokeOnMainThread(() =>
{
byte[] fotoBytes = t.Result;
// Image image = new Image();
imagem = ImageSource.FromStream(() => new MemoryStream(fotoBytes));
Navigation.PushAsync(new FotoEnvolvido(imagem));
});
}
});
};
FotoEnvolvido.cs :
public partial class FotoEnvolvido : ContentPage
{
private ImageSource imagem;
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
this.imagem = imagem;
BindingContext = imagem;
}
}
FotoEnvolvido.xaml :
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Image Source="{Binding imagem}" x:Name="fotoperfil"/>
</Grid>
您的 BindingContext 需要 this
或者您必须绑定到 .
public partial class FotoEnvolvido : ContentPage
{
public ImageSource Imagem {get; set; }
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
Imagem = imagem;
BindingContext = this;
}
}
<Image Source="{Binding Imagem}" x:Name="fotoperfil"/>
或
public partial class FotoEnvolvido : ContentPage
{
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
BindingContext = imagem;
}
}
<Image Source="{Binding}" x:Name="fotoperfil"/>
我在这里看到了很多例子,我正在努力适应我的代码!但是,当图像出现时,它变成空白...... 我只想在单击按钮后显示图像。不是为了保存在智能手机上。
.cs代码:
ApiCall apiCallFoto = new ApiCall();
ImageSource imagem = null;
btnFoto.Clicked += async (sender, e) =>
{
await apiCallFoto.GetFoto<byte[]>("Nomes", "Foto", envolvID).ContinueWith(t =>
{
//Aqui verificamos se houve problema ne requisição
if (t.IsFaulted)
{
Debug.WriteLine(t.Exception.Message);
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Falha", "Ocorreu um erro na Requisição :(", "Ok");
});
}
//Aqui verificamos se a requisição foi cancelada por algum Motivo
else if (t.IsCanceled)
{
Debug.WriteLine("Requisição cancelada");
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Cancela", "Requisição Cancelada :O", "Ok");
});
}
//Caso a requisição ocorra sem problemas, cairemos aqui
else
{
//Se Chegarmos aqui, está tudo ok, agora itemos tratar nossa Lista
Device.BeginInvokeOnMainThread(() =>
{
byte[] fotoBytes = t.Result;
// Image image = new Image();
imagem = ImageSource.FromStream(() => new MemoryStream(fotoBytes));
Navigation.PushAsync(new FotoEnvolvido(imagem));
});
}
});
};
FotoEnvolvido.cs :
public partial class FotoEnvolvido : ContentPage
{
private ImageSource imagem;
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
this.imagem = imagem;
BindingContext = imagem;
}
}
FotoEnvolvido.xaml :
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Image Source="{Binding imagem}" x:Name="fotoperfil"/>
</Grid>
您的 BindingContext 需要 this
或者您必须绑定到 .
public partial class FotoEnvolvido : ContentPage
{
public ImageSource Imagem {get; set; }
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
Imagem = imagem;
BindingContext = this;
}
}
<Image Source="{Binding Imagem}" x:Name="fotoperfil"/>
或
public partial class FotoEnvolvido : ContentPage
{
public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
BindingContext = imagem;
}
}
<Image Source="{Binding}" x:Name="fotoperfil"/>