2012-08-06 40 views
4

我的應用程序中有一個主頁面和一個相機頁面。主頁面有一個沒有源代碼集和一個按鈕的圖片。如果您點擊該按鈕,它會將您帶到相機頁面。在相機頁面上,我捕獲一張圖像並將其保存在平板電腦的圖片庫中,然後導航回主要頁面,在那裏我想將圖像的來源設置爲剛拍攝並保存在圖片庫中的圖像。這是我的相關代碼。在Metro應用程序中以編程方式設置圖像源,未出現圖像

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"/> 

MainPage.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; 
    } 

Camera.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方法保存到圖像庫中的圖像。

我的問題是,圖片永遠不會出現在第一頁上的圖像!請幫忙!

+0

我已經嘗試了兩個答案,但不爲我工作。 我在這個頁面找到任何解決方案,它完全適合我。 [http://www.c-sharpcorner.com/UploadFile/99bb20/load-image-dynamically-from-application-uri-in-windows-store/](http://www.c-sharpcorner.com/UploadFile/99bb20/load-image-dynamically-from-application-uri-in-windows-store /) – 2014-02-19 12:54:11

回答

4

這也可能是有幫助的人試圖解決從本地資源文件更新映像的相關問題。

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; 
} 

代碼爲here

+0

這讓我走上了正確的道路。我最終不得不取消引用圖像源,然後刪除圖像並更新佈局,以便從圖像中刪除圖像。 – 2012-09-11 17:39:14

+0

這麼多行代碼來做這樣一個簡單而常見的事情。爲什麼微軟不能提供像myImage = new Image(string imagePath); ?可能不會遵守他們認同的任何模式或其他circlejerk。 – nedR 2015-09-16 09:47:35

3

我覺得這部分的問題是:

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; 
相關問題