Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将多个着色器效果应用于DrawingVisual?_Wpf_Drawing_Pixel Shader - Fatal编程技术网

Wpf 如何将多个着色器效果应用于DrawingVisual?

Wpf 如何将多个着色器效果应用于DrawingVisual?,wpf,drawing,pixel-shader,Wpf,Drawing,Pixel Shader,我得到了一个DrawingVisualObject dv,并在对其DrawingContext dc进行复杂转换后绘制了一幅图像。在dc.Close之后,我想在dv对象上运行多个着色器效果。首先是自定义着色效果,然后是模糊效果。后来我想添加亮度,饱和度等校正也。如何应用这些效果?DrawingVisual仅允许一种效果。是否可以将其嵌套到另一个对象中,并对其应用第二种效果?那么新巢、第三效应等等?还是类似的?最后一个对象(在效果之后)必须是最后的RenderTargetBitmap渲染的源 代码

我得到了一个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);

虽然被接受的答案中的链接已经死了,但这可能还是有帮助的:谢谢,我看到了那篇帖子,但我必须在代码隐藏中解决这个问题。奥斯卡奖颁给了克莱门斯!非常感谢你,它似乎工作完美!!!