Ich hatte das gleiche Problem, weil ImageSource.FromStream Versionen immer der Stream erstellt ... Hier ist mein Code, die Bilder und zeigt die Bilder in einem binded Listview nimmt.
Kurz gesagt, ich bekomme den Original-Stream aus dem Plugin, dann wandle ich es in Byte [] und speichern Sie es in einem dedizierten Objekt. Wenn ich das Bild in einer Bildquelle anzeigen muss, erstelle ich einen neuen Stream aus dem Byte [] und verwende es mit der ImageSource.FromStream-Methode aus Xamarin.Forms.
public class PictureModel
{
public byte[] File { get; set; }
public ImageSource ImageSource => ImageSource.FromStream(() => new MemoryStream(File));
}
public class PicturesViewModel : ViewModelBase
{
public ObservableCollection<PictureModel> Pictures { get; set; } = new ObservableCollection<PictureModel>();
public ICommand TakePictureCommand => new Command(async() =>
{
var stream = await TakePictureAsync();
var picture = new PictureModel { File = await ImageConverter.ReadFully(stream) }; // custom method to convert stream into byte[]
Pictures.Add(picture);
});
protected async Task<Stream> TakePictureAsync()
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
return null;
}
var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
{
SaveToAlbum = false,
PhotoSize = PhotoSize.Medium
});
if (file == null)
return null;
var stream = file.GetStream();
file.Dispose();
return stream;
}
}
Vielleicht brauche ich den lokalen Strom in der TakePictureCommand zu entsorgen, aber ich noch nicht testen.
Und die XAML:
<ListView x:Name="listView" ItemsSource="{Binding Pictures}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" RowHeight="200">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Image Source="{Binding ImageSource}" WidthRequest="400" HeightRequest="200" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Sie Haltepunkte setzen Haben in? Können Sie feststellen, ob 'image' null oder' file' ist? –
Können Sie uns mehr Code zeigen? Es ist schwer zu wissen, was von einer einzelnen Linie aus geschieht. – Adam