2014-07-13 4 views
8

Windows Phone 8.1에서 내 그림 앨범의 이미지를 선택하고 싶습니다. 이를 위해 나는 당신도 당신이 필요한 페이지에 OnActivated 이벤트를 처리 할 수 ​​있다고 생각이 코드를 사용하지만 오류Windows Phone 8.1의 파일 선택기

private async void gallery_Tapped(object sender, TappedRoutedEventArgs e) 
     { 
      FileOpenPicker opener = new FileOpenPicker(); 
      opener.ViewMode = PickerViewMode.Thumbnail; 
      opener.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
      opener.FileTypeFilter.Add(".jpg"); 
      opener.FileTypeFilter.Add(".jpeg"); 
      opener.FileTypeFilter.Add(".png"); 

      StorageFile file = await opener.PickSingleFileAsync(); 
      if (file != null) 
      { 
       // We've now got the file. Do something with it. 
       var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
       var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); 
       await bitmapImage.SetSourceAsync(stream); 

       var decoder = await    Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream); 
       MyImage.Source=bitmapImage; 
      } 
      else 
      { 
       //OutputTextBlock.Text = "The operation may have been cancelled."; 
      } 
     } 

오류

enter image description here

+1

당신이 [PickSingleFileAndContinue] 사용하지 말아야합니다 (http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.pickers.fileopenpicker.picksinglefileandcontinue. aspx?)? –

+1

Ulugbek이 말했듯이 - Windows Phone을 목표로 삼고 있으며 이러한 메서드 (* PickSingleFileAsync() *)를 사용할 수 없으므로 파일을 선택하는 동안 앱이 종료 될 수 있습니다. 위의 방법을 사용해야합니다. 자세한 내용과 좋은 예를 보려면 [여기 MSDN] (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn614994.aspx)을 참조하십시오. – Romasz

+0

네, 그게 맞지만 그 무효를 반환하는 선택한 파일을 어떻게 처리할까요? –

답변

15

을 제공합니다. 이 같은 것

CoreApplicationView view = CoreApplication.GetCurrentView(); 

ImagePath=string.Empty; 
FileOpenPicker filePicker = new FileOpenPicker(); 
filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
filePicker.ViewMode = PickerViewMode.Thumbnail; 

// Filter to include a sample subset of file types 
filePicker.FileTypeFilter.Clear(); 
filePicker.FileTypeFilter.Add(".bmp"); 
filePicker.FileTypeFilter.Add(".png"); 
filePicker.FileTypeFilter.Add(".jpeg"); 
filePicker.FileTypeFilter.Add(".jpg"); 

filePicker.PickSingleFileAndContinue(); 
view.Activated += viewActivated; 

private void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1) 
{ 
    FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs; 

    if (args != null) 
    { 
     if (args.Files.Count == 0) return; 

     view.Activated -= viewActivated; 
     storageFileWP = args.Files[0]; 

    } 
} 

피커에서 파일을 선택하면 위의 방법이 호출됩니다. 나는 그것이 당신을 돕는다고 믿습니다.

3

사용 RoutedEventArgs 대신 WP 8.1 XAML 에서 버튼 클릭에 대한 TappedRoutedEventArgs 비동기 키워드

private void OpenImageFile(object sender, RoutedEventArgs e) 
 
{    
 
      FileOpenPicker filePicker = new FileOpenPicker(); 
 
      filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
 
      filePicker.ViewMode = PickerViewMode.Thumbnail; 
 

 
      // Filter to include a sample subset of file types 
 
      filePicker.FileTypeFilter.Clear(); 
 
      filePicker.FileTypeFilter.Add(".bmp"); 
 
      filePicker.FileTypeFilter.Add(".png"); 
 
      filePicker.FileTypeFilter.Add(".jpeg"); 
 
      filePicker.FileTypeFilter.Add(".jpg"); 
 

 
      filePicker.PickSingleFileAndContinue(); 
 
      view.Activated += viewActivated; 
 
} 
 

 
private void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1) 
 
{ 
 
      FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs; 
 

 
      if (args != null) 
 
      { 
 
       if (args.Files.Count == 0) return; 
 

 
       view.Activated -= viewActivated; 
 
       StorageFile SelectedImageFile = args.Files[0]; 
 

 
      } 
 
}

  • 을 사용하고 CoreApplicationView보기를 사용하지 마십시오; 어디서나 모든 클래스의 클래스가 글로벌 인 경우
  • view = CoreApplication.GetCurrentView();를 사용하는 것을 잊지 마십시오. InitializeComponent() 후에 해당 페이지 클래스의 생성자 내부. 방법

나는 :)이 도움이 될 것입니다 생각 감사

0

VAR 채우기 = StorageFile.GetFileFromPathAsync (selectItem.FolderPath)을 기다리고 있습니다; BitmapImage bit = 새 BitmapImage();

    if (fill != null) 
        { 
         // We've now got the file. Do something with it. 
         var stream = await fill.OpenAsync(Windows.Storage.FileAccessMode.Read); 
         //var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); 
         //await bitmapImage.SetSourceAsync(stream); 
         bit.SetSource(stream); 
         imgTeste.Source = bit; 
         pvMestre.SelectedIndex = 1; 
        } 
        else 
        { 
         //OutputTextBlock.Text = "The operation may have been cancelled."; 
        } 
+0

코드에 설명을 추가 할 수 있습니까? –

12

Windows Phone 8.1에서 FileOpenPicker를 사용하여 그림 갤러리에서 그림을 선택하십시오.

1 단계 : Windows Phone 8.1 앱에 그림 라이브러리 기능을 추가하십시오.

Picture Library Capability

2 단계 : 선언으로 파일 열기 선택기를 추가합니다.

File Open Picker declaration

3 단계 :에서 MainPage.xaml에 버튼과 이미지를 추가합니다.

<Grid> 
<Image Name="img"/> 
<Button Content="click me" Click="Button_Click"/> 
</Grid> 

4 단계 : 전역 변수보기를 추가하십시오.

CoreApplicationView view; 

단계 4.1 페이지 생성자에서 초기화하십시오.

view = CoreApplication.GetCurrentView(); 

5 단계 : 단추 클릭 이벤트에서 파일 열기 선택기를 호출하는 코드를 추가하십시오.

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    FileOpenPicker filePicker = new FileOpenPicker(); 
    filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
    filePicker.ViewMode = PickerViewMode.Thumbnail; 

    // Filter to include a sample subset of file types 
    filePicker.FileTypeFilter.Clear(); 
    filePicker.FileTypeFilter.Add(".bmp"); 
    filePicker.FileTypeFilter.Add(".png"); 
    filePicker.FileTypeFilter.Add(".jpeg"); 
    filePicker.FileTypeFilter.Add(".jpg"); 

    filePicker.PickSingleFileAndContinue(); 
    view.Activated += viewActivated; 
} 

6 단계 : 활성화 된 이벤트보기에서 이미지를 MainPage로 설정하십시오.

private async void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1) 
{ 
    FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs; 

    if (args != null) 
    { 
     if (args.Files.Count == 0) return; 

     view.Activated -= viewActivated; 
     StorageFile storageFile = args.Files[0]; 
     var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read); 
     var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); 
     await bitmapImage.SetSourceAsync(stream); 

     var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream); 
     img.Source=bitmapImage; 
    } 
} 

또한 사진을 찍어 사용할 수 있습니다.

참조 : Using FileOpenPicker in Windows Phone 8.1 to choose picture from Picture Gallery

+0

코드 내에서 ImagePath 변수를 사용하지 않았습니다. 그것은 무엇을위한 것인가? –

+0

당신이 옳습니다! 나는 그것을 사용하지 않았고 왜 그곳에 있는지 알지 못한다. 나는 현재 구현을 찾고 있는데 ImagePath는 거기에 없다. 지금 내 대답을 편집 중입니다. 감사! – isscroberto

+0

사용자가 선택없이 파일 선택기를 중단 한 경우에 대비하여 카운트가 체크되기 전에 이벤트 처리기를 제거하지 않아야합니까? – dlatikay

관련 문제