Как динамически скопировать выбранное изображение из библиотеки изображений в папку изображений в приложении? - PullRequest
0 голосов
/ 23 ноября 2010

Я новичок в разработке приложений для 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);

            }
        } 
    }

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

Ответы [ 3 ]

4 голосов
/ 23 ноября 2010

Вот пример сохранения выбранного изображения в 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 голосов
/ 23 ноября 2010

Фактически, как только вы получите поток, вы можете преобразовать его в байт и сохранить локально. Вот что вы должны иметь в обработчике событий 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 голосов
/ 23 ноября 2010

Вы можете обратиться к примечаниям к выпуску RTM в пересмотренном API Photo Chooser или к документу чуть ниже по этой странице.Приложение для Windows Phone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...