【发布时间】:2011-06-07 17:52:20
【问题描述】:
关于我的应用的简要说明:
我正在开发的应用程序就是这样一个贺卡设计器。想象一下有一个背景图像,以及无限数量的“层”(特别是图片)留在背景上并且可以移动、调整大小、前后移动等等......
也可以在这些图层上应用特定的形状,如星形、椭圆形,.. 制作卡片后,可以将其保存为 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 Path(这是我正在应用的形状)。
所以,原则是如果我有名为*im_the_problem*的边框,则不会释放内存。如果我评论 *im_the_problem* (所以我只会有没有形状的矩形图层/图片)一切都像魅力一样工作,没有内存泄漏。
问题应该出在 OpacityMask + VisualBrush。
我做错了吗? 还是有已知问题?有没有办法以不同的方式做同样的事情(将形状应用于图片..)?
谢谢。
【问题讨论】:
标签: memory-leaks binding visualbrush opacitymask