如何获取存储在资源中的图像的 Uri

Posted

技术标签:

【中文标题】如何获取存储在资源中的图像的 Uri【英文标题】:How to get a Uri of the image stored in the resources 【发布时间】:2014-05-22 05:28:45 【问题描述】:

我有两个 .png 文件添加到我的资源中,我需要在绑定时访问它们的 Uri。

我的xaml代码如下:

<Grid>
  <Image>
    <Image.Source>
       <BitmapImage DecodePixelWidth="10" UriSource="Binding Path=ImagePath"/>
    </Image.Source>
  </Image> 
</Grid>

而使用 ImagePathbinding 代码是:

ImagePath = resultInBinary.StartsWith("1") ? Properties.Resources.LedGreen : Properties.Resources.ledRed;

然而

Properties.Resources.LedGreen

返回一个 Bitmap 而不是 String 包含该特定图像的 Uri。 我只想知道如何提取该值,而无需在其存储的目录中处理图像的路径。 (老实说,我不确定这样做是否正确,因为我在网上找不到任何类似的情况)。

如果有的话,请告诉我是否有比我尝试使用的首选方法。

【问题讨论】:

【参考方案1】:

在 WPF 应用程序中,您通常不会将图像存储在 Properties/Resources.resx 中并通过 Properties.Resources 类访问它们。

相反,您只需将图像文件作为常规文件添加到您的 Visual Studio 项目中,可能位于名为“Images”之类的文件夹中。然后您将他们的Build Action 设置为Resource,这是在“属性”窗口中完成的。你到达那里,例如通过右键单击图像文件并选择Properties 菜单项。请注意,对于图像文件,Build Action 的默认值应该是 Resource

为了从代码中访问这些图像资源,您需要使用Pack URI。使用上面的文件夹名称“Images”和一个名为“LedGreen.png”的图像文件,创建这样的 URI 如下所示:

var uri = new Uri("pack://application:,,,/Images/LedGreen.png");

所以你也许可以将你的属性声明为 Uri 类型:

public Uri ImageUri  get; set;  // omitted INotifyPropertyChanged implementation

然后这样设置:

ImageUri = resultInBinary.StartsWith("1")
         ? new Uri("pack://application:,,,/Images/LedGreen.png")
         : new Uri("pack://application:,,,/Images/LedRed.png");

最后,您的 XAML 应该如下所示,它依赖于从 Uri 到 ImageSource 的内置类型转换:

<Grid>
    <Image Width="10" Source="Binding Path=ImageUri" />
</Grid>

【讨论】:

感谢您的描述性答案,更重要的是关于正确方法的建议。我已经按照您建议的方式实施了我的解决方案,但是我想知道我是否需要将这些图像与我要交给其他团队的可执行文件一起携带和保存?由于这是一个相当简单的项目,我不打算为它制作安装程序。 否,Resource 构建操作会将图像文件添加到程序集中。所以它们包含在可执行文件中。【参考方案2】:

Properties.Resources.LedGreen 属性声明为ImageSource 并将其设置为Uri 位置而不是Bitmap 对象。

或者,如果您坚持将其存储为位图,则可以通过返回 Properties.Resources.LedGreen.ImageSource 来获取源代码,其类型为 ImageSource

我更喜欢第一种方法。

【讨论】:

以上是关于如何获取存储在资源中的图像的 Uri的主要内容,如果未能解决你的问题,请参考以下文章

将图像上传到 Firebase 存储后如何获取图像 uri?

获取存储在drawable中的图像的URI

获取存储在drawable中的图像的URI

获取存储在 sd 卡 + android 中的图像的缩略图 Uri/路径

如何裁剪从android资源文件夹(@mipmap)获取的图像?

如何从android pie中的内容uri获取文件路径