C# 如何使RenderTargetBitmap和VisualBrush一起很好地发挥作用?
我的要求:C# 如何使RenderTargetBitmap和VisualBrush一起很好地发挥作用?,c#,.net,wpf,visualbrush,rendertargetbitmap,C#,.net,Wpf,Visualbrush,Rendertargetbitmap,我的要求: 一种持久的UserControl,用于处理自定义图像(如地图或图形)的逻辑 一组容器,用于在缩放或平移移动期间对图像进行缓存 VisualBrush我可以添加到容器中用于特效的UserControl副本 我目前使用RenderTargetBitmap实现图像缓存,但我使用的VisualBrush-覆盖的矩形对象似乎有问题 我的问题:在RenderTargetBitmap使用VisualBrush对象后,我可以在该代码中添加/更改哪些内容以使其正确渲染?RenderTargetBi
- 一种持久的
,用于处理自定义图像(如地图或图形)的逻辑UserControl
- 一组容器,用于在缩放或平移移动期间对图像进行缓存
我可以添加到容器中用于特效的VisualBrush
副本UserControl
VisualBrush
-覆盖的矩形
对象似乎有问题
我的问题:在RenderTargetBitmap
使用VisualBrush
对象后,我可以在该代码中添加/更改哪些内容以使其正确渲染?RenderTargetBitmap
做了什么奇怪的事情使得VisualBrush
不可见
如果没有足够的代码,我无法重现这个问题
在我的xaml文件中,我有:
<Window x:Class="ElementRender.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525">
<Grid>
<Grid Name="_contentContainer">
<Rectangle Fill="White"/>
<Grid Name="_content">
<Grid Name="_back"/>
<Grid Name="_body"/>
</Grid>
</Grid>
<StackPanel VerticalAlignment="Bottom" Orientation="Horizontal">
<Button Content="New" Name="New"/>
<Button Content="Move" Name="Move"/>
<Button Content="Update" Name="Update"/>
</StackPanel>
</Grid>
</Window>
关于代码的一些帮助说明:
- xaml的
与\u contentContainer
一起工作,将当前图像复制到图像缓存中,硬拷贝()
\u back
返回一个框架元素,该元素与中的过去元素完全相同,但没有任何变换、效果或视觉父元素。这是非常重要的SoftCopy
模拟在初始图像经过某种方式的转换后,构建一个新图像以粘贴到缓存上BuildImage
\u body.Children.Add(SoftCopy(Control))中删除SoftCopy()
代码>,您可以看到我想要得到的效果:新元素粘贴在旧元素的上方,而旧元素似乎保留了它的转换
或者,如果剪切线var rtb=new RenderTargetBitmap(宽度、高度、96、96、PixelFormats.Pbgra32)
从硬拷贝
,缓存功能已中断,但软拷贝显示正确
但是,如果您按原样运行应用程序,您会注意到新的Blue矩形(通过VisualBrush渲染)根本不会显示,直到您再次点击“新建”按钮,将图像推到缓存中,仍然不会显示新创建的图像。我不太理解这篇文章,但有几件重要的事情:
若将RenderTransform/Margins应用于元素并对其拍照(RenderTargetBItmap),那个么您就要倒霉了。它将被抵消,你将得到唯一的子图片
我们的想法是在不使用任何rendertransforms的情况下拍摄照片,然后将RenderTransform复制到旧照片上。如果需要的话 我不太理解这篇文章,但有几点很重要:
若将RenderTransform/Margins应用于元素并对其拍照(RenderTargetBItmap),那个么您就要倒霉了。它将被抵消,你将得到唯一的子图片
我们的想法是在不使用任何rendertransforms的情况下拍摄照片,然后将RenderTransform复制到旧照片上。如果需要的话 我会夸大其词地称之为WPF中的bug。我最终发现了如何解决我所遇到的奇怪行为:
var visual = visualBrush.Visual;
visualBrush.Visual = null;
visualBrush.Visual = visual;
这本质上应该是一个空操作:到最后,视觉画笔的视觉效果与启动时相同。但是,在将VisualBrush
渲染到RenderTargetBitmap
中之后添加此代码段修复了我遇到的问题。我会夸大其词地将其称为WPF中的错误。我最终发现了如何解决我所遇到的奇怪行为:
var visual = visualBrush.Visual;
visualBrush.Visual = null;
visualBrush.Visual = visual;
这本质上应该是一个空操作:到最后,视觉画笔的视觉效果与启动时相同。但是,在将VisualBrush
渲染到RenderTargetBitmap
后添加此代码段修复了我遇到的问题。我知道这是一篇旧文章,但您能解释一下RenderTransform/Margins是什么意思吗?我也得到了偏移量问题(在左边)。这个WPF错误在哪里被记录了吗?我知道这是一篇老文章,但是你能解释一下你所说的RenderTransform/Margins是什么意思吗?我也得到了偏移量问题(在左边)。是否在任何地方记录了此WPF错误?问题已在此处完全解决:问题已在此处完全解决: