2010-11-23 1 views
0

Я новичок в разработке приложений для Windows Phone 7. Я обращаюсь к библиотеке изображений с помощью класса PhotoChooserTask. После выбора одного из изображений из библиотеки изображений я хочу добавить это изображение (.jpg файл) из библиотеки изображений в папку изображений моего приложения. Как это сделать? Я использую следующий кодКак скопировать выбранное изображение из библиотеки изображений в папку изображений динамически в приложении?

public partial class MainPage : PhoneApplicationPage 
    { 

     PhotoChooserTask photoChooserTask; 
     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 
      photoChooserTask = new PhotoChooserTask(); 
      photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      photoChooserTask.Show();    
     } 

     void photoChooserTask_Completed(object sender, PhotoResult e) 
     { 
      if (e.TaskResult == TaskResult.OK) 
      { 
       BitmapImage bmp = new BitmapImage(); 
       bmp.SetSource(e.ChosenPhoto); 

      } 
     } 
    } 

Я хочу добавить выбранное изображение динамически в папку изображений моего приложения. как это сделать? Можете ли вы предоставить мне какой-либо код или ссылку, через которую я могу решить вышеупомянутую проблему?

ответ

4

Вот пример сохранения выбранного изображения в IsolatedStorage, а затем читать его, чтобы отобразить его на странице:

void photoChooserTask_Completed(object sender, PhotoResult e) 
{ 
    if (e.TaskResult == TaskResult.OK) 
    { 
     var contents = new byte[1024]; 

     using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (var local = new IsolatedStorageFileStream("image.jpg", FileMode.Create, store)) 
      { 
       int bytes; 
       while ((bytes = e.ChosenPhoto.Read(contents, 0, contents.Length)) > 0) 
       { 
        local.Write(contents, 0, bytes); 
       } 
      } 

      // Read the saved image back out 
      var fileStream = store.OpenFile("image.jpg", FileMode.Open, FileAccess.Read); 
      var imageAsBitmap = PictureDecoder.DecodeJpeg(fileStream); 

      // Display the read image in a control on the page called 'MyImage' 
      MyImage.Source = imageAsBitmap; 
     } 
    } 
} 
0

В самом деле, как только вы получите поток, вы можете преобразовать его в байты и хранить локально. Вот то, что вы должны иметь в своем Task_Completed обработчика событий:

using (MemoryStream stream = new MemoryStream()) 
{ 
    byte[] contents = new byte[1024]; 
    int bytes; 

    while ((bytes = e.ChosenPhoto.Read(contents, 0, contents.Length)) > 0) 
    { 
     stream.Write(contents, 0, bytes); 
    } 

    using (var local = new IsolatedStorageFileStream("myImage.jpg", FileMode.Create, IsolatedStorageFile.GetUserStoreForApplication())) 
    { 
     local.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length); 
    } 
} 
+0

FYI. Для этого вам не нужно создавать отдельный MemoryStream. Кроме того, ваш код не избавляет от свойства IsolStorageFile, возвращаемого GetUserStoreForApplication(). – 2010-11-23 12:39:37

Смежные вопросы