#c_sharp #wpf
Имеется объект System.Drawing.Bitmap. В WinForms можно было просто использовать PictureBox,
чтобы просмотреть изображение. В WPF есть контрол Image, которому Bitmap скормить нельзя.
Нашел способ переделки в BitmapImage
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
return bi;
}
ImageBox.Source = logic.NextPage(); // это объект Image
Но ничего не происходит (хотя и ошибок нет). Нужна помощь.
Ответы
Ответ 1
Попробуйте добавить bi.CacheOption = BitmapCacheOption.OnLoad; перед bi.StreamSource = ms; Пояснение: BitmapImage содержит внутри оптимизацию, которая не грузит данные сразу, а запоминает StreamSource и грузит потом. Но вы уничтожаете MemoryStream (что правильно), поэтому BitmapImage не может позже загрузит данные. Для будущих поколений: System.Windows.Media.ImageSource BitmapToImageSource(System.Windows.Bitmap bmp) { using (var ms = new System.IO.MemoryStream()) { bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png); ms.Position = 0; var img = new System.Windows.Media.Imaging.BitmapImage(); img.BeginInit(); img.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad; img.StreamSource = ms; img.EndInit(); return img; } }
Комментариев нет:
Отправить комментарий