WPF 共享映像内存



我想优化我的 WPF 应用程序中的内存使用量。我想从磁盘加载一个jpg图像,并以它的真实大小显示它。然后我想显示从磁盘加载的原始图像的 5 个裁剪的正方形部分。(不会对任何图像应用调整大小(。我想通过加载原始图像一次并在图像控件之间共享该数据来完成所有这些工作,这样就不会浪费内存,并且所有控件都从同一内存位置获取数据。

尝试使用内存流对象,但最终由于位图和位图图像之间的一些转换,我最终复制了数据。

我在这里找到了一种从BitmapImage裁剪图像的有趣方法,我认为这将解决您的问题。这样,您只需使用一个BitmapImage即可显示所有图像

在 xaml 中,全分辨率图像只是一个常规图像元素,但裁剪后的图像将是使用具有特定视框的图像画笔的矩形元素。只需使用所需裁剪图像的高度和宽度定义矩形,然后将视图框定义为"x y 宽度高度"(在我的示例中为"10 20 100 200"(,并记住 x 从 0 开始表示左侧,向右移动为正,y 从顶部的 0 开始,向下移动为正。

    <Image Source="{Binding Image}"></Image>
    <Rectangle Height="200" Width="100">
        <Rectangle.Fill>
            <ImageBrush ViewboxUnits="Absolute" Viewbox="10,20,100,200" ImageSource="{Binding Image}"></ImageBrush>
        </Rectangle.Fill>
    </Rectangle>

请注意,Image 和 ImageBrush 的绑定是相同的,因此您只需定义一次Image,并且它会在两个元素中使用。

最新更新