1

我尝试了很多方法来将图像源设置为我的 UWP 应用程序中的网络目录。例如我试过这个例子:

BitmapImage bitmap = new BitmapImage(new Uri(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg"));
UserImage.Source = bitmap;

bitmap.UriSource = new Uri(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg", UriKind.Absolute);
UserImage.Source = bitmap;

但它们都不起作用。我最终遇到了以下错误E_NETWORK_ERROR,我已经从 stackoverflow 和其他资源中读取了许多链接,但是没有任何对我有用的东西。

我已经为它设置了所需的功能和声明。

我已经尝试过了,Windows.Storage.Pickers.FolderPicker但我找不到任何可以设置读取文件的文件夹位置的东西。我不想打开文件夹选择器,我只想直接从网络的指定位置获取图像。

可能有些人试图将它与这张票联系起来如何在 Windows 通用应用程序中显示来自网络文件夹或本地驱动器的图像, 但这对我的任务没有帮助。

我也为我尝试了这些示例,但仍然无法实现目标: https ://docs.microsoft.com/en-us/windows/uwp/files/quickstart-managing-folders-in-the-music-pictures -和视频库

https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.image

我收到System.UnauthorizedAccessException: 'Access is denied.错误

4

2 回答 2

5

要在网络上的共享文件夹中设置.jpg文件,我们可以StorageFile先获取,然后使用SetSource方法将源设置为.jpg BitmapImage。要访问共享文件夹中的文件,我们需要在应用清单中声明一些功能。

在此处输入图像描述

通用命名约定 (UNC) 是 Microsoft Windows 中常用的用于访问共享网络文件夹的命名系统。有关详细信息,请参阅文件访问权限

这是我的 Package.appxmanifest:

<Applications>
  <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="UWP_how_to_show_image_from_a_network.App">
    <uap:VisualElements DisplayName="UWP how to show image from a network" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="UWP how to show image from a network" BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    <Extensions>
      <uap:Extension Category="windows.fileTypeAssociation">
        <uap:FileTypeAssociation Name="mypictest">
          <uap:DisplayName>MyPicTest</uap:DisplayName>
          <uap:SupportedFileTypes>
            <uap:FileType>.jpg</uap:FileType>
          </uap:SupportedFileTypes>
        </uap:FileTypeAssociation>
      </uap:Extension>
    </Extensions>
  </Application>
</Applications>
<Capabilities>
  <Capability Name="internetClient" />
  <Capability Name="privateNetworkClientServer" />
  <Capability Name="internetClientServer" />
  <uap:Capability Name="enterpriseAuthentication" />
</Capabilities>

设置BitmapImage的代码:

    StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -");
    StorageFile file = await folder.GetFileAsync("APR3783216-MED-BLK TAPE-GB-Apron.jpg");
    using (var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read)){
    BitmapImage bitmap = new BitmapImage();
    bitmap.SetSource(stream);
    UserImage.Source = bitmap;
}
于 2017-08-31T06:14:51.010 回答
2

你不能使用任何路径。只有KnownFolders和本地应用程序路径。但是您可以从任何地方获取字节数组:

            var file = File.ReadAllBytes(_path);

            var bitmap = new BitmapImage();

            using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
            {
                await stream.WriteAsync(file.AsBuffer());
                stream.Seek(0);
                await bitmap.SetSourceAsync(stream);
            }
于 2017-08-30T11:43:50.843 回答