Ошибка в том, что поток памяти недоступен, когда он закрыт. Это происходит, когда я пытаюсь установить предыдущее изображение элемента управления изображением обратно в Gif. Когда предыдущее изображение было GIF, я преобразовал его в растровое изображение с потоком памяти. Когда предыдущее изображение было обычным png или jpg, оно может отображаться успешно.
Я попытался выяснить, как исправить ошибку. Решение, которое я пробовал, состоит в том, чтобы преобразовать изображения в byte [], но тогда gif не анимируется, как будто они были преобразованы в статическое изображение.
Для отображения gif я использую пакет NuGet под названием WPFAnimatedGifи для того, чтобы Wpf выглядел лучше, я использую пакет NuGet Materialdesigntheme
Это код события, который срабатывает при перетаскивании отпускать
if (previousIcon != null)
{
ToggleButton buttonControl = (ToggleButton)sender;
Image imageControl = (Image)((Grid)buttonControl.Content).Children[1];
if (previousIcon.ContainsKey(buttonControl))
ImageBehavior.SetAnimatedSource(imageControl, previousIcon[buttonControl]);
}
Как я конвертирую его
BitmapImage bmImage = new BitmapImage();
using (MemoryStream stream = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbm));
encoder.Save(stream);
bmImage.BeginInit();
bmImage.CacheOption = BitmapCacheOption.OnLoad;
bmImage.StreamSource = stream;
bmImage.EndInit();
bmImage.Freeze();
}
Для получения полного кода посетите эти Pastebins:
Редактировать
Обновлена функция преобразования на основе ответов
public BitmapImage ConvertWriteableBitmapToBitmapImage(WriteableBitmap wbm)
{
BitmapImage bmImage = new BitmapImage();
MemoryStream stream = new MemoryStream();
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbm));
encoder.Save(stream);
//stream.Position = 0;
bmImage.BeginInit();
bmImage.CacheOption = BitmapCacheOption.OnLoad;
bmImage.StreamSource = stream;
bmImage.EndInit();
bmImage.Freeze();
return bmImage;
}