关于我的应用程序的简要说明:
我正在开发的应用程序就是这样的贺卡设计师。想象一下,其中有一个背景图像,以及无限数量的“层”(特别是图片)留在背景上,可以移动、调整大小、前后移动等等......
也可以对这些图层应用特定的形状,如星形、椭圆形,.. 制作卡片后,可以保存为 jpeg 文件。
问题
一切正常,但我检测到当形状应用于图层时,会产生内存泄漏。
下面是每一层的UserControl的代码:
<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 中。
难道我做错了什么?还是有已知问题?有没有办法以不同的方式做同样的事情(将形状应用于图片..)?
谢谢。