Функция PushEffect в DrawingContext устарела. Существует ли обходной путь для динамического добавления эффектов?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Функция PushEffect в DrawingContext устарела. Существует ли обходной путь для динамического добавления эффектов?

Сообщение Anonymous »

У меня есть специальный элемент управления, предназначенный для обработки составных изображений с эффектами. Я хочу применить пользовательские эффекты шейдера к определенным элементам рендеринга этого элемента управления, но встроенные функции PushEffect и PopEffect, которые легко могли бы это сделать, устарели и ничего не делают.
Итак, чтобы Для достижения своих целей я создал новый DrawingVisual, нарисовал свои изображения к этому визуальному элементу и применил эффект к указанному визуальному элементу, и все это выглядело великолепно. Однако, чтобы мои элементы управления рисовали изображение, мне нужно запустить его через RenderTargetBitmap, который сводит на нет мой пользовательский эффект, поскольку он не отображает эффекты, скомпилированные в Shader Model 3 или выше.
Мой вопрос кипит. вплоть до этого:
  • Есть ли способ заставить встроенный OnRender DrawingContext рисовать другое изображение контекста, не передавая его через RenderTargetBitmap? Может быть, есть способ скомпилировать несколько контекстов рисования без предварительного преобразования их в изображения? Мне известны группы рисования, но я не знаю, как их использовать с OnRender.
Обратите внимание, что моя цель — сделать это в коде. позади, поэтому решения XAML не будут слишком полезны. Я также готов услышать альтернативные способы применения эффектов к конкретным элементам настраиваемого элемента управления, которые мне могут отсутствовать.
Все на .Net Framework 4.7.2, если это имеет значение.
public class CustomControl : FrameworkElement
{
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
DrawingVisual drawingVisual = new DrawingVisual();

// Retrieve the DrawingContext in order to create new drawing content.
DrawingContext drawingVisualContext = drawingVisual.RenderOpen();

// Create a rectangle and draw it in the DrawingVisual.
Rect rect = new Rect(new Point(0, 0), new Size(200, 400));
drawingVisualContext.DrawRectangle(Brushes.LightBlue, null, rect);

// Persist the visual's content.
drawingVisualContext.Close();

// Note: using the built in Blur or DropShadow effects will work fine. Specifically, to
// reproduce, youll need a custom effect that is complied in Shadermodel 3 or later.
// To obtain a custom effect you will need to build one yourself or look into Shazzam
// (https://github.com/JohanLarsson/Shazzam) - an old tool I specifically use to create
// custom effects
drawingVisual.Effect = new CustomEffect();
//drawingVisual.Effect = new BlurEffect() { Radius = 25 };

// This will remove our custom effect since it uses software rendering afaik, which Shader
// Model 3 cannot be rendered with
RenderTargetBitmap bitmap = new RenderTargetBitmap((int)200, (int)400, 96, 96, PixelFormats.Default);
bitmap.Render(drawingVisual);

drawingContext.DrawImage(bitmap, rect);
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... und-for-dy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли обходной путь для динамического добавления сносков Microsoft Word в Python?
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как использовать настройки шрифта с FormattedText и DrawingContext
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Существует ли эквивалент помеченного разрыва Java в C # или обходной путь
    Гость » » в форуме C#
    0 Ответы
    116 Просмотры
    Последнее сообщение Гость
  • Java — обходной путь десериализации ненадежных данных
    Гость » » в форуме JAVA
    0 Ответы
    94 Просмотры
    Последнее сообщение Гость
  • Обходной путь для ошибки фокусировки iframe в iOS 10–12 WebKit (Safari/Chrome)
    Anonymous » » в форуме IOS
    0 Ответы
    90 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»