Wpf 如何将多个着色器效果应用于DrawingVisual?
我得到了一个DrawingVisualObject dv,并在对其DrawingContext dc进行复杂转换后绘制了一幅图像。在dc.Close之后,我想在dv对象上运行多个着色器效果。首先是自定义着色效果,然后是模糊效果。后来我想添加亮度,饱和度等校正也。如何应用这些效果?DrawingVisual仅允许一种效果。是否可以将其嵌套到另一个对象中,并对其应用第二种效果?那么新巢、第三效应等等?还是类似的?最后一个对象(在效果之后)必须是最后的RenderTargetBitmap渲染的源 代码隐藏部分:Wpf 如何将多个着色器效果应用于DrawingVisual?,wpf,drawing,pixel-shader,Wpf,Drawing,Pixel Shader,我得到了一个DrawingVisualObject dv,并在对其DrawingContext dc进行复杂转换后绘制了一幅图像。在dc.Close之后,我想在dv对象上运行多个着色器效果。首先是自定义着色效果,然后是模糊效果。后来我想添加亮度,饱和度等校正也。如何应用这些效果?DrawingVisual仅允许一种效果。是否可以将其嵌套到另一个对象中,并对其应用第二种效果?那么新巢、第三效应等等?还是类似的?最后一个对象(在效果之后)必须是最后的RenderTargetBitmap渲染的源 代码
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
...
dc.DrawImage(...);
dc.Close();
[Apply Effects Required]
BitmapSource render = dv.RenderVisualAsBitmap(...); // custom RenderTargetBitmap rendering
问候,,
Zoltan您可以使用嵌套的ContainerVersion:
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);
虽然被接受的答案中的链接已经死了,但这可能还是有帮助的:谢谢,我看到了那篇帖子,但我必须在代码隐藏中解决这个问题。奥斯卡奖颁给了克莱门斯!非常感谢你,它似乎工作完美!!!