2012-08-09 90 views
0

我一直在嘗試在地鐵應用程序的畫布上繪製圖像,但到目前爲止尚未出現任何圖像。這裏是我的代碼:在地鐵應用程序中將圖像繪製到畫布

Rectangle blueRectangle = new Rectangle(); 
     blueRectangle.Height = 100; 
     blueRectangle.Width = 200; 
     ImageBrush imgBrush = new ImageBrush(); 
     imgBrush.ImageSource = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("C:\\Users\\Public\\Pictures\\dock.jpg")); 
     blueRectangle.Fill = imgBrush; 
     paintCanvas.Children.Add(blueRectangle); 

當我用線

 blueRectangle.Fill = new SolidColorBrush(Colors.Blue); 

,而不是一個使用的圖像刷我得到一個藍色的矩形像我預期的,所以我想我必須做一些錯誤的圖像刷。

我計劃在遊戲中使用圖像作爲精靈,當我學習如何繪製它們時,我必須能夠使用c#來操縱它們。

感謝您的幫助!

編輯: 我已經改變了訪問漫遊應用程序數據的代碼,但我仍然沒有找到文件異常。 (該文件位於正確的位置)

ApplicationData appData = ApplicationData.Current; 

     try 
     { 
      StorageFile sourceFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/dock.jpg")); 
      await sourceFile.CopyAsync(appData.RoamingFolder); 
     } 
     catch (Exception ex) 
     { 
      // If images have already been copied the CopyAsync() methods aboev will fail. 
      // Ignore those errors. 
      System.Diagnostics.Debug.WriteLine(ex.ToString()); 
     } 

     Rectangle blueRectangle = new Rectangle(); 
     blueRectangle.Height = 100; 
     blueRectangle.Width = 200; 

     // Create an ImageBrush 
     ImageBrush imgBrush = new ImageBrush(); 

     imgBrush.ImageSource = new BitmapImage(new Uri("ms-appdata:///roaming/dock.png")); 

     // Fill rectangle with an ImageBrush 
     blueRectangle.Fill = imgBrush; 
     //blueRectangle.Fill = new SolidColorBrush(Colors.Blue); 
     paintCanvas.Children.Add(blueRectangle); 

回答

2

我終於明白了。這是我現在的代碼。

StorageFile file; 
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;  

string filePath = @"Assets\dock.jpg"; 
file = await InstallationFolder.GetFileAsync(filePath); 
IRandomAccessStream dockpic = await file.OpenAsync(0); 
BitmapImage dockimage = new BitmapImage(); 
dockimage.SetSource(dockpic); 

Rectangle blueRectangle = new Rectangle(); 
blueRectangle.Height = 100; 
blueRectangle.Width = 200; 
// Create an ImageBrush 
ImageBrush imgBrush = new ImageBrush(); 
imgBrush.ImageSource = dockimage; 

// Fill rectangle with an ImageBrush 
blueRectangle.Fill = imgBrush; 
paintCanvas.Children.Add(blueRectangle); 

我結束了使用StorageFolder和使用流,而不是從一個URI創建的BitmapImage。

1

您無法以Metro風格應用程序的方式訪問本地數據。有關如何訪問本地數據的方法,請參見accessing local dataApplication data sample上的這篇文章。

+0

感謝您的示例。我試過使用該方法來訪問應用程序的漫遊數據,但我得到一個FileNotFoundException。 – connor 2012-08-09 14:08:58