У меня есть экземпляр a, System.Drawing.Bitmap
и я хотел бы сделать его доступным для моего приложения WPF в форме a System.Windows.Media.Imaging.BitmapImage
.
Что будет лучшим подходом для этого?
Как насчет загрузки его из MemoryStream?
using(MemoryStream memory = new MemoryStream())
{
bitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
ms.Seek(0, SeekOrigin.Begin);
перед настройкойbi.StreamSource
. Я использую .NET 4.0.Благодаря Hallgrim, вот код, с которым я закончил:
Я также закончил привязку к BitmapSource вместо BitmapImage, как в моем первоначальном вопросе
источник
DeleteObject
для этого дескриптора.BitmapSizeOptions.FromEmptyOptions()
, и он отлично работает в моей ситуации.Я знаю, что на этот вопрос уже дан ответ, но вот пара методов расширения (для .NET 3.0+), которые выполняют преобразование. :)
и класс NativeMethods (чтобы успокоить FxCop)
источник
Мне потребовалось некоторое время, чтобы преобразование работало в обоих направлениях, поэтому вот два метода расширения, которые я придумал:
источник
Самое простое, если вы можете сделать растровое изображение WPF из файла напрямую.
В противном случае вам придется использовать System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap.
источник
источник
Вы можете просто поделиться пиксельными данными между обоими пространствами имен (Media и Drawing), написав собственный битовый источник данных. Преобразование произойдет немедленно, и дополнительная память не будет выделена. Если вы не хотите явно создавать копию своего растрового изображения, этот метод вам нужен.
источник
Я работаю с поставщиком изображений и написал адаптер для WPF для нашего формата изображений, который похож на System.Drawing.Bitmap.
Я написал этот KB, чтобы объяснить это нашим клиентам:
http://www.atalasoft.com/kb/article.aspx?id=10156
И там есть код, который делает это. Вам нужно заменить AtalaImage на Bitmap и сделать то же самое, что мы делаем - это должно быть довольно просто.
источник
Мой взгляд на это построен из ряда ресурсов. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
источник
Я пришел к этому вопросу, потому что пытался сделать то же самое, но в моем случае битмап получен из ресурса / файла. Я нашел лучшее решение, как описано в следующей ссылке:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
источник