有关我的应用程序的简要说明:WPF - 边境与OpacityMask/VisualBrush:内存泄漏
在我工作的应用程序是这样的贺卡设计师。想象一下,有背景图像和无限数量的“层”(特别是图片),可以保持背景,并可以移动,调整大小,前后移动等等。
它也可以应用这些图层的特定形状,如星形,椭圆形等等。卡片制作完成后,可以保存为jpeg文件。
问题
一切正常,但我检测到时的形状施加到层中,产生内存泄漏。
下面是每个层的用户控件的代码:
<UserControl>
.....
<Grid x:Name="_myGrid" >
<Border x:Name="im_the_problem" BorderThickness="0" OpacityMask="{Binding Path=MyMask.Data, Converter={StaticResource MaskConverter}}">
<!-- My Image... -->
</Border>
</Grid>
</UserControl>
其中MaskConverter的代码如下:
public class MaskConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
String maskData = value as String;
if (maskData == null)
return null;
if (maskData == "")
return null;
VisualBrush vb = new VisualBrush();
vb.Visual = XamlReader.Parse(maskData) as Visual;
return vb;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
参数 “MyMask.Data” 是XAML 路径(即我正在应用的形状),我从包含不同形状的文本文件中进行加载。
所以,原则是,如果我有边界名为* im_the_problem *,内存不释放。如果我评论* im_the_problem *(所以我只会有矩形图层/图片没有形状),一切都像一个魅力,没有内存泄漏。
问题应该出现在OpacityMask + VisualBrush中。
我做错了什么? 还是有一个已知的问题?有没有办法以不同的方式做同样的事情(对图片应用形状..)?
谢谢。