2012-08-09 4 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); 

나는 나는 내가 뭔가 잘못을하고있을 생각합니다 그래서 구성처럼 ImageBrush와 나는 파란색 사각형을 얻을 사용하여 하나의

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

대신 줄을 사용하는 경우 ImageBrush.

이미지를 그리는 방법을 배울 때 게임에서 스프라이트로 이미지를 사용할 계획이므로 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