получить путь к выбранному изображению с помощью fileopenpicker windows phone 8.1 С#

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

Теперь я просто отправляю путь к своему изображению на вторую страницу. но с тем же путем я не могу получить изображение.

Вот мой код.

  private async void button_Click(object sender, RoutedEventArgs e)
    {

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


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


            **//ImagePath is global string. I get the image path here** 


            ImagePath = storageFile.Path;

            var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
            await bitmapImage.SetSourceAsync(stream);

            var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);

           //image is my image control in Xaml. 
            image.Source = bitmapImage;
        }

    }

    private void image_click(object sender, TappedRoutedEventArgs e)
    {
        this.Frame.Navigate(typeof(detail), ImagePath);
    }

Нажав на изображение, я перехожу к подробному экрану. где у меня есть еще один элемент управления изображением, где я хочу показать то же изображение, проходящее через путь.

Код моего подробного экрана:

    protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        var imagePath = e.Parameter as string;
         image2.Source = new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));
    }

Приведенный выше код не работал.

Тогда я попробовал другой способ,

        var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri(imagePath));

        Stream stream = await file.OpenStreamForReadAsync();
        using (var memStream = new MemoryStream())
        {
            await stream.CopyToAsync(memStream);
            memStream.Position = 0;

            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(memStream.AsRandomAccessStream());

            // create a new stream and encoder for the new image
            InMemoryRandomAccessStream mrAccessStream = new InMemoryRandomAccessStream();
            BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(mrAccessStream, decoder);

            // convert the bitmap to a 400px by 600px bitmap
            encoder.BitmapTransform.ScaledHeight = 400;
            encoder.BitmapTransform.ScaledWidth = 600;

            try
            {
                await encoder.FlushAsync();
            }
            catch (Exception ex)
            {
                string s = ex.ToString();
            }

            // render the stream to the screen
            WB = new WriteableBitmap(500, 500);
            WB.SetSource(mrAccessStream);

            image2.Source = WB;

Это тоже не сработало. Думаю проблема в пути. У меня есть путь, неудобный путь, как

      "C:\\Data\\Users\\Public\\Pictures\\Saved Pictures\\Image-130872081698409356.jpeg".

Пожалуйста, помогите мне избавиться от этой проблемы.


person Arsal    schedule 20.09.2015    source источник
comment
Правильно. Windows Phone не имеет такой файловой структуры. вы не можете загрузить файл любого типа. путь неверный - в этом проблема. Вы видели, что это было за исключение? что было исключением?   -  person Ahmed ilyas    schedule 20.09.2015
comment
для обоих способов нет исключений. Я просто не получил изображение при управлении изображением.   -  person Arsal    schedule 20.09.2015
comment
Не могли бы вы сообщить мне, как получить точный путь, чтобы я мог использовать его где угодно и получить изображение.   -  person Arsal    schedule 20.09.2015
comment
Вы пытались использовать StorageApplicationPermissions.MostRecentlyUsedList или StorageApplicationPermissions.FutureAccessList? Однако вы будете идентифицировать файл по токену, а не по полному пути, но именно так приложение метро обеспечивает доступ к файлам.   -  person DK.    schedule 20.09.2015
comment
Нет, я не использовал это. не могли бы вы предоставить мне образец для этого?   -  person Arsal    schedule 20.09.2015
comment
Конечно. В MSDN есть хорошая статья на эту тему: Как отслеживать последние используемые файлы и папки. Вы также можете просмотреть Доступ к файлам и разрешения.   -  person DK.    schedule 20.09.2015


Ответы (1)


Это сделано по дизайну, и это проблема безопасности. Представьте, что произойдет, если, зная путь к файлу, вы сможете получить к нему доступ. Модель безопасности приложений магазина будет нарушена.

Обратите внимание, что это средство выбора файлов, которое предоставляет вам файл, к которому у вас есть доступ. Вы можете начать с средства выбора файлов, чтобы получить доступ к файлу. Вы не можете начать с пути, чтобы получить доступ к файлу. Средство выбора файлов гарантирует, что пользователь будет вовлечен и, следовательно, будет осведомлен о том, что происходит. Если бы вам было разрешено начать с пути и программно получить доступ к файлу, это нарушило бы правила безопасности для магазинов приложений.

person Ladi    schedule 20.09.2015
comment
ага. но каков будет процесс получения этого изображения? Единственный способ - сохранить путь к изображению... и я буду использовать этот путь, чтобы получить свое изображение на другом экране. - person Arsal; 20.09.2015
comment
Загрузите содержимое этого изображения на первую страницу, где вы получите доступ к файлу. Сохраните этот контент в памяти и передайте эти данные прямо или косвенно на следующую страницу. Затем используйте эти данные на следующей странице. Другой вариант — на первой странице вы копируете файл в локальное хранилище, к которому у вас есть доступ. На второй странице вы можете получить доступ к файлу, который вы скопировали в локальное хранилище. - person Ladi; 20.09.2015
comment
Да. Ты прав. Мне нужно скопировать файл изображения в локальное хранилище. не могли бы вы прислать мне какой-нибудь пример для хранения изображения в локальном хранилище? - person Arsal; 20.09.2015
comment
Я понял вашу точку зрения, не могли бы вы предоставить мне правильное решение этой проблемы. - person Arsal; 20.09.2015