2010-11-02 59 views
2

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

我想过要为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; 
+0

Meleak,感谢您的回答。我也不确定我是否理解你的解决方案。我有两个问题:1.代码是强制性的吗?资源可以直接在XAML中使用吗? 2.你知道WPF框架是否会在舞台后面进行转换,或者这个代码真的更有效吗? – sagibb 2010-11-23 07:50:06

+0

@tutipute:后面的代码仅用于在代码后面创建图像。 xaml方法不使用代码(所以是的,可以直接在xaml中使用)。如果您在设计器中添加图像,请查看其属性并按源,然后您可以从对话框中选择源(​​将显示所有适用的资源)。之后你可以检查xaml中的uri。请注意,资源的构建操作必须设置为“资源”。 – 2010-11-23 10:20:25

+0

@tutipute:回答问题2:这是在WPF中为图像使用资源的方式,所以我确定它非常优化。 – 2010-11-23 10:25:39