如何将多个着色器效果应用于 DrawingVisual?
How to apply multiple shader effects to a DrawingVisual?
我有一个 DrawingVisual 对象 (dv) 并在对其 DrawingContext (dc) 进行复杂转换后绘制图像。在dc.Close() 之后,我想运行 dv 对象上的多个着色器效果。首先是自定义 Tint 效果,然后是模糊效果。稍后我还想添加亮度、饱和度等校正。如何应用效果? DrawingVisual 只允许一种效果。是否可以将它嵌套到另一个对象中,并对其应用第二个效果?然后是新巢,第三效果等等?或者类似的东西?最终对象 - 在效果之后 - 必须是最后一个 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);
我有一个 DrawingVisual 对象 (dv) 并在对其 DrawingContext (dc) 进行复杂转换后绘制图像。在dc.Close() 之后,我想运行 dv 对象上的多个着色器效果。首先是自定义 Tint 效果,然后是模糊效果。稍后我还想添加亮度、饱和度等校正。如何应用效果? DrawingVisual 只允许一种效果。是否可以将它嵌套到另一个对象中,并对其应用第二个效果?然后是新巢,第三效果等等?或者类似的东西?最终对象 - 在效果之后 - 必须是最后一个 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);