2014-07-13 32 views
8

Resimlerin albümünden Windows 8.1 kamerada bir resim seçmek istiyorum. Bunun için ben bile gerekli sayfasında OnActivated olayı işleyebilir düşünüyorum Bu kodu kullanılır ama onun hatasıWindows Phone 8.1 Dosya Seçici

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

Hata

enter image description here

+1

sen [PickSingleFileAndContinue] kullanmak gerekmiyor (http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.pickers.fileopenpicker.picksinglefileandcontinue. aspx?)? –

+1

Ulugbek'in dediği gibi - Windows Phone'u hedefliyorsunuz ve bu yöntemleri kullanamazsınız (* PickSingleFileAsync() *), dolayısıyla dosya seçerken uygulamanız sonlandırılabilir. Yukarıdaki yöntemi kullanmalısınız - daha fazla referans ve iyi bir örnek [burada MSDN'de bulabilirsiniz] (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn614994.aspx). – Romasz

+0

Evet Bunu düzeltdim, ancak bu seçili dosya ile nasıl çalışılacağı void döndürüyor? –

cevap

15

verir. Yukarıdaki gibi bir dosya seçerseniz, yukarıdaki yöntem çağrılacaktır. Sana yardım ettiğine inanıyorum.

3

Kullanım RoutedEventArgs yerine wp 8.1 xaml düğme tıklama için TappedRoutedEventArgs zaman uyumsuz anahtar kelimeyi

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

 
      } 
 
}

  • kullanmak Ve CoreApplicationView görünümünü kullanmayın; Her yöntemin sınıf dışına her hangi bir yerde global olarak
  • Görünümünü kullanmayı unutma = CoreApplication.GetCurrentView(); InitializeComponent() öğesinden sonra ilgili sayfa sınıfının kurucusunun içinde; yöntem

ben :) bu yardımcı olacağını düşündüğümüz Teşekkür

0

var dolgu = StorageFile.GetFileFromPathAsync (selectItem.FolderPath) beklemektedir; BitmapImage bit = yeni 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

yazmak için kod ile mücadele ediyorum Kodunuza bir açıklama ekleyebilir misiniz? –

12

Windows Phone 8.1'de FileOpenPicker'ı kullanarak Picture Gallery'den resim seçin.

Adım 1: Windows Phone 8.1 uygulamanızda Resim Kitaplığı Özelliği ekleyin.

Picture Library Capability

Adım 2: Bir bildiri olarak Dosya Aç Seçici ekleyin.

File Open Picker declaration

Adım 3: MainPage.xaml bir düğme ve resim ekleyin.

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

Adım 4: Genel değişken görünümü ekleyin.

Adım 4.1 Sayfa yapıcısında başlangıç ​​durumuna getirin.

view = CoreApplication.GetCurrentView(); 

5. Adım: Düğmeyi Dosya Aç Seçici Düğmesi Tıklat olayını çağırmak için ekleyin.

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

Adım 6: Görünüm aktive olayda MainPage görüntüyü ayarlayın.

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

Ayrıca bir fotoğraf çekip kullanmanıza da izin verir.

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

+0

Kodunuzda hiç ImagePath değişkeni kullanmadınız. Bu ne için? –

+0

Haklısınız! Hiç kullanmadım, neden orada olduğunu bile bilmiyorum, şu anki uygulamamı arıyorum ve ImagePath orada yok. Cevabımı şimdi düzenliyorum. Teşekkürler! – isscroberto

+0

, olay seçicinin dosya seçiciyi seçimsiz olarak iptal etmesi durumunda, olay denetleyicisinin sayım kontrol edilmeden önce kaldırılmaması gerekir mi? – dlatikay

İlgili konular