Читаем Язык программирования C#9 и платформа .NET5 полностью

  // Создать объект System.Windows.Media.FormattedText.

   FormattedText text = new FormattedText(

    "Hello Visual Layer!",

    new System.Globalization.CultureInfo("en-us"),

    FlowDirection.LeftToRight,

    new Typeface(this.FontFamily, FontStyles.Italic,

      FontWeights.DemiBold, FontStretches.UltraExpanded),

    TextFontSize,

    Brushes.Green,

    null,

    VisualTreeHelper.GetDpi(this).PixelsPerDip);

  // Создать объект DrawingVisual и получить объект DrawingContext.

  DrawingVisual drawingVisual = new DrawingVisual;

  using(DrawingContext drawingContext =

    drawingVisual.RenderOpen)

  {

    // Вызвать любой из методов DrawingContext для визуализации данных.

    drawingContext.DrawRoundedRectangle(

      Brushes.Yellow, new Pen(Brushes.Black, 5),

      new Rect(5, 5, 450, 100), 20, 20);

    drawingContext.DrawText(text, new Point(20, 20));

  }

  // Динамически создать битовое изображение,

  // используя данные в объекте DrawingVisual.

  RenderTargetBitmap bmp = new RenderTargetBitmap(

    500, 100, 100, 90, PixelFormats.Pbgra32);

  bmp.Render(drawingVisual);

  // Установить источник для элемента управления Image.

  myImage.Source = bmp;

}

В коде задействовано несколько новых классов WPF, которые будут кратко описаны ниже. Метод начинается с создания нового объекта FormattedText, который представляет текстовую часть конструируемого изображения в памяти. Как видите, конструктор позволяет указывать многочисленные атрибуты, в том числе размер шрифта, семейство шрифтов, цвет переднего плана и сам текст.

Затем через вызов метода RenderOpen на экземпляре DrawingVisual получается необходимый объект DrawingContext. Здесь в DrawingVisual визуализируется цветной прямоугольник со скругленными углами, за которым следует форматированный текст. В обоих случаях графические данные помещаются в DrawingVisual с применением жестко закодированных значений, что не слишком хорошо в производственном приложении, но вполне подходит для такого простого теста.

Несколько последних операторов отображают DrawingVisual на объект RenderTagetBitmap, который является членом пространства имен System.Windows.Media.Imaging. Этот класс принимает визуальный объект и трансформирует его в растровое изображение, находящееся в памяти. Затем устанавливается свойство Source элемента управления Image и получается вывод, показанный на рис. 26.14.

На заметку! Пространство имен System.Windows.Media.Imaging содержит дополнительные классы кодирования, которые позволяют сохранять находящийся в памяти объект RenderTargetBitmap в физический файл в разнообразных форматах. Детали ищите в описании JpegBitmapEncoder и связанных с ним классов.

<p id="AutBody_Root1203"><strong>Визуализация графических данных в специальном диспетчере компоновки</strong></p>

Хотя применение DrawingVisual для рисования на фоне элемента управления WPF представляет интерес, возможно чаще придется строить специальный диспетчер компоновки (Grid, StackPanel, Canvas и т.д.), который внутренне использует визуальный уровень для визуализации своего содержимого. После создания такого специального  диспетчера компоновки его можно подключить к обычному элементу Window (а также Page или UserControl) и позволить части пользовательского интерфейса использовать высоко оптимизированный агент визуализации, в то время как для визуализации некритичных графических данных будут применяться фигуры  и рисунки.

Если дополнительная функциональность, предлагаемая специализированным диспетчером компоновки, не требуется, то можно просто расширить класс FrameworkElement, который обладает необходимой инфраструктурой, позволяющей содержать также и визуальные элементы. В целях иллюстрации вставьте в проект новый класс по имени CustomVisualFrameworkElement.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT