Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Как в WPF просмотреть изображение?

#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; } }

Комментариев нет:

Отправить комментарий