System.Drawing.Image из ImageSource в ресурсах

Мой вопрос очень похож на этот: ресурсы изображения wpf и изменение изображения в элементе управления wpf во время выполнения, но с небольшим поворотом.

Вот мой ResourceDictionary.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ImageSource x:Key="DisconnectedIcon">Images/disconnect.png</ImageSource>
<ImageSource x:Key="Synced">Images/tick.png</ImageSource>
<ImageSource x:Key="NotSynced">Images/x.png</ImageSource>

Что касается кода на C#, я могу загрузить ImageSource из ресурсов следующим образом. В котором я могу видеть метаданные и имя изображения, но не могу понять, как получить их в System.Drawings.Image.

var imageSource = (ImageSource)Application.Current.FindResource("Synced");

System.Drawing.Image img = Image.FromFile(???)

Причина, по которой я пытаюсь преобразовать его в System.Drawing.Image, состоит в том, чтобы отправить его на принтер.

Спасибо!

1 ответ

В WPF каждый элемент пользовательского интерфейса расширяет Visual Класс, обеспечивающий поддержку рендеринга в WPF. Также есть RenderTargetBitmap Класс, который имеет Render Метод, который принимает Visual Объект в качестве входного параметра. Так что вы можете установить свой ImageSource как Source свойство Image и просто сделать Image к Bitmap образ:

Image yourImageObject = new Image();
yourImageObject.Source = yourImageSource;

RenderTargetBitmap renderTargetBitmap = 
    new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
renderTargetBitmap.Render(yourImageObject);

// Save to .png file
PngBitmapEncoder pngBitmapEncoder = new PngBitmapEncoder();    
pngBitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));    
using (Stream stream = File.Create(filepath))    
{    
    pngBitmapEncoder.Save(stream);    
}

Поскольку это хорошо задокументировано в интернете, я не стану повторять здесь всю историю. Чтобы узнать подробности, ознакомьтесь с разделом " Как отобразить растровое изображение" или "Распечатать визуальную страницу в WPF" на веб-сайте Dot NET Tricks, который также поможет вам с вашими требованиями к печати.

Другие вопросы по тегам