在 Metro 应用中以编程方式设置图像源,不显示图像
本文关键字:图像 显示图 显示 设置 方式 应用 Metro 编程 | 更新日期: 2024-11-07 16:25:31
我的应用程序中有一个主页和一个相机页面。主页有一个没有设置其源的图像和一个按钮。如果单击该按钮,它将带您进入相机页面。在相机页面上,我捕获图像并将其保存在平板电脑上的图片库中,然后导航回主页,我想将图像源设置为我刚刚捕获并保存在图片库中的图像。这是我的相关代码。
MainPage.xaml
<Image x:Name="imgResume" HorizontalAlignment="Left" Height="303" Margin="975,60,0,0" Grid.Row="1" VerticalAlignment="Top" Width="360" Stretch="UniformToFill" Loaded="img_OnLoaded"/>
<Button x:Name="btnCamera" Content="Camera" HorizontalAlignment="Left" Margin="1128,372,0,0" Grid.Row="1" VerticalAlignment="Top" RenderTransformOrigin="2.05800008773804,0.184000000357628" Height="59" Width="108" Click="Camera_Click" IsEnabled="False"/>
主页.xaml.cs
private void img_OnLoaded(object sender, RoutedEventArgs e)
{
if (txtFirstName.Text != "" && txtLastName.Text != "")
{
try
{
imgResume.Source = ImageFromRelativePath(this, Windows.Storage.KnownFolders.PicturesLibrary.Path + ((App)Application.Current).candidate.FirstName + ((App)Application.Current).candidate.FirstName + "Resume.jpg");
imgResume.UpdateLayout();
}
catch
{
imgResume.Source = ImageFromRelativePath(this, @"Assets/logo.png");
imgResume.UpdateLayout();
}
btnCamera.IsEnabled = true;
}
}
public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path)
{
var uri = new Uri(parent.BaseUri, path);
BitmapImage result = new BitmapImage();
result.UriSource = uri;
return result;
}
相机.xaml.cs
private async void Capture_Click(object sender, RoutedEventArgs e)
{
if (mediaCaptureMgr != null)
{
string firstName = ((App)Application.Current).candidate.FirstName;
string lastName = ((App)Application.Current).candidate.LastName;
string fileName = firstName + lastName + "Resume.jpg";
Windows.Storage.IStorageFile photo = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.ReplaceExisting);
await mediaCaptureMgr.CapturePhotoToStorageFileAsync(Windows.Media.MediaProperties.ImageEncodingProperties.CreateJpeg(), photo);
this.Frame.Navigate(typeof(BasicPersonalInfo));
}
}
MainPage.xaml 文件中的img_OnLoaded方法尝试将图像源设置为我从 Camera.xaml.cs 中的Capture_click方法保存到图片库的图像。
我的问题是图片永远不会出现在第一页的图像上!请帮忙!
这也可能有助于尝试解决从本地资源文件更新映像的相关问题。
myImage.Source = ImageFromRelativePath(this, "relative_path_to_file_make_sure_build_set_to_content");
public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path)
{
var uri = new Uri(parent.BaseUri, path);
BitmapImage result = new BitmapImage();
result.UriSource = uri;
return result;
}
代码来自这里。
我认为这部分是问题所在:
var uri = new Uri(parent.BaseUri, path);
这似乎尝试从安装文件夹加载图像,而您的路径是完整路径,我相信在 WinRT 中打开文件不支持该路径,并且即使使用 baseUri 也肯定不能用作 Uri。
相反,您应该执行以下操作:
var file = await Windows.Storage.KnownFolders.PicturesLibrary.GetFileAsync(((App)Application.Current).candidate.FirstName + "Resume.jpg");
var stream = await file.OpenReadAsync();
var bi = new BitmapImage();
bi.SetSource(stream);
return bi;