有關我的應用程序的簡要說明: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中。
我做錯了什麼? 還是有一個已知的問題?有沒有辦法以不同的方式做同樣的事情(對圖片應用形狀..)?
謝謝。