如何将多个着色器效果应用于绘图视觉对象?



我有一个DrawingVisual对象(dv(,并在对其DrawingContext(dc(进行复杂转换后绘制图像。在 dc.Close(( 之后,我想在 dv 对象上运行多个着色器效果。首先是自定义色调效果,然后是模糊效果。稍后我还想添加亮度、饱和度等校正。如何应用效果?绘图视觉只允许一种效果。是否可以将其嵌套到另一个对象中,并对其应用第二种效果?然后是新巢,第三效果等?还是类似的东西?效果之后的最后一个对象必须是最后的 RenderTargetBitmap Render(( 的源。

代码后面部分:

DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
...
dc.DrawImage(...);
dc.Close();
[Apply Effects Required]
BitmapSource render = dv.RenderVisualAsBitmap(...); // custom RenderTargetBitmap rendering

问候 佐尔坦

您可以使用嵌套的 ContainerVisuals:

var dv = new DrawingVisual { Effect = new BlurEffect() };
using (var dc = dv.RenderOpen())
{
dc.DrawRectangle(Brushes.Red, new Pen(Brushes.Green, 5), new Rect(100, 100, 100, 100));
}
var cv = new ContainerVisual { Effect = new DropShadowEffect() };
cv.Children.Add(dv);
// more ContainerVisual here
var rtb = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Default);
rtb.Render(cv);

最新更新