【问题标题】:Using resources images in WPF在 WPF 中使用资源图像
【发布时间】:2011-05-03 22:50:09
【问题描述】:

据我所知,WPF 图像的源是 BitmapSource 对象,而资源图像被读取为位图。我很容易找到一种将图像从 Bitmap 格式转换为 BitmapSource 格式的方法,但我相信每次我需要图像时运行这种转换在性能和内存消耗方面都是昂贵的(位图本身是静态的,但我猜转换会在内存中为 BitmapSource 分配一个新对象)。

我曾考虑为 BitmapSource 对象保留一个内存中的惰性缓存,这样我只需要为每个图像运行一次转换。但是,我很难相信这是解决此问题的正确方法。

应用程序的本质是数据随着时间的推移而扩展,而业务对象永远不会被释放。因此,只有在实现为这些静态图像保存静态资源的情况下,这个假设才会成立。

我将非常感谢适当的解决此问题的方法。

【问题讨论】:

    标签: wpf performance resources bitmap bitmapsource


    【解决方案1】:

    我不确定我是否理解您的意思,但您可以像这样使用资源中的图片。
    如果您有一个名为“B1.png”的图像资源,并且您将“构建操作”设置为“资源”,那么您可以像这样在 xaml 中使用它。

    <Image Name="c_image" Source="/YourAssemblyName;component/Resources/B1.png" />
    

    在这样的代码后面

    Image img = new Image();
    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.BeginInit(); 
    bitmapImage.UriSource = new Uri("pack://application:,,,/YourAssemblyName;component/Resources/B1.png"); 
    bitmapImage.EndInit(); 
    img.Source = bitmapImage;
    

    【讨论】:

    • Meleak,感谢您的回答。我也不确定我是否理解您的解决方案。我有两个问题: 1. 后面的代码是强制性的吗?资源可以直接在 XAML 中使用吗? 2.你知道WPF框架会在后台运行转换还是这段代码真的更有效?
    • @tutipute:后面的代码仅用于在后面的代码中创建图像。 xaml 方式不使用后面的代码(所以是的,可以直接在 xaml 中使用)。如果您在设计器中添加图像,查看它的属性并按 Source,然后您可以从对话框中选择源(​​将显示所有适用的资源)。之后,您可以检查 xaml 中的 uri。请注意,资源的构建操作必须设置为 Resource。
    • @tutipute:回答问题 2:这是在 WPF 中使用 Image 资源的方式,所以我确信它已经非常优化了。
    • @Meleak,嘿兄弟 /YourAssemblyName 是什么?这是 resx 文件吗?什么是组件/资源?我不明白这条路,谢谢
    猜你喜欢
    • 2015-12-21
    • 2011-01-24
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2010-10-30
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多