#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; } }
Комментариев нет:
Отправить комментарий