Fork me on GitHub

UWP-ImageSource

Week3

这篇博客记录一下自己在图片路径走过的坑。

图片路径

在 UI 中显示图片,常用的是这两个控件: Image 和几何图形控件。有时候,我们需要获取图片的路径。对于这两个控件,获取路径都可能遇到一个问题: ImageSource 转换为 string。

  1. Image控件

    Image 控件是原生的展示图片的控件。对于 Image 控件,它有 Source 属性来存储其中图片的URI位置,类型为 ImageSource。我们可以将它拿到。这是第一次遇到这个问题。

  2. 几何图形控件
    几何图形控件显示图片利用其 Fill 方法,将一个 ImageBrush 赋值给它,可以让其显示图片(但它的类型是 brush)。

    对于 brush,查阅官方文档可以看到,它没有任何属性或方法可以 get 到它的图层来源 URI。暂时推测,它的显示原理是将指定给它的 URI 渲染成图层之后,自动舍弃这个值。所以,如果使用如下 xaml 代码实现的图片显示,则无法获取其图片 URI。

    1
    2
    <!--xaml code-->
    <Rectangle x:Name="Image"/>
    1
    2
    3
    4
    5
    //c# code
    var brush = new ImageBrush {
    ImageSource = new BitmapImage(new Uri("..."))
    };
    Image.Fill = brush;

    目前,我没有找到方法可以得到它的 URI。在经过问询之后,得到了如下的解决方案。

    1
    2
    3
    4
    5
    6
    <!--xaml code-->
    <Rectangle>
    <Rectangle.Fill>
    <ImageBrush x:Name="Image">
    </Rectangle.Fill>
    </Rectangle>
    1
    2
    //c# code
    Image.ImageSource = new BitmapImage(new Uri("..."));

    我们给 ImageBrush 设置它的 ImageSource 属性,然后将这个 ImageBrush 赋值给 Fill,以此达到显示图片的效果。同时,我们还可以通过 Image 这个名字来获取它的 ImageSource。但是,又回到了原来的问题: 怎么将 ImageSource 转换为 string。

ImageSource 转成 string

在 Stack Overflow 上,查到了相关资料:

1
string temp = (Image.ImageSource as BitmapImage).UriSource.OriginalString;

这就解决了这个图片路径的问题。

(如果有其他方法,欢迎邮件,共同学习)