Как загрузить изображение из файла в c # в формате UWP - PullRequest
0 голосов
/ 30 августа 2018

Я бывший ИТ-специалист, много занимался программированием баз данных со всеми видами программного обеспечения, занимался всеми видами языков программирования, от PL / 1 и Pascal до новейшего Python. Я пытаюсь выучить c # в среде UWP, чтобы написать приложение Mixed Reality. Да, я знаю, что я амбициозен .... потому что сейчас это вообще не работает! лол!

Я дал себе небольшой «простой» проект, чтобы начать играть с классами и изучать программное обеспечение. Это простая программа для создания слайдшоу в c #, использующая .Net Framework, потому что я хочу иметь возможность использовать ее как в Mixed Reality, так и в 2D-приложении. Я уже запрограммировал это в Python, поэтому я пытаюсь перенести его на c # (я знаю, что это не прямой порт ... омг ...). И, боже, я не могу найти ни одного приличного учебника или фрагментов кода в тоннах поиска в Google, которые я сделал. Многое в c # без .Net, много на других языках, но не в среде, которую я пытаюсь использовать.

Так! Я дошел до создания своего приложения в Visual Studio 2017 с пустым приложением UWP. Я использую «Изображение» из набора инструментов и помещаю его на мой экран, создал AppBarButton, чтобы поместить в него свои элементы управления. Я создал (используя другой пример) средство выбора, которое возвращает файл хранилища, чтобы выбрать файл jpg, и я могу поместить имя в текстовое поле, которое я создал на том же экране.

Однако !!!

После нескольких часов возни, я не могу найти, как загрузить изображение в это "Изображение", которое я создал в XAML. Кроме того, я хочу манипулировать этим изображением, увеличивать его, поворачивать, и я понятия не имею, где искать. Наконец, если бы кто-нибудь мог дать мне подсказки о том, как читать весь список файлов из каталога и как также использовать файлы Zip, в то время как мы занимаемся этим, это было бы очень ценно.

Если у вас есть кусочки кодов, я их прочитаю или, если у вас есть учебники, которые я должен сделать, пожалуйста, предложите прочь !!! Тем не менее, будучи опытным ИТ-специалистом, я ищу инструкции, которые имеют смысл. Я попытался посмотреть учебник по Microsoft C # и потерял терпение из-за безвкусных шуток и медленного темпа .... и я ОЧЕНЬ терпеливый парень в жизни ....

Для ссылки я включил сюда мой код XAML и C # того места, где я сейчас нахожусь. После всех этих лет программирования очень неприятно чувствовать себя ребенком, который учится говорить! лол!

Часть XAML:

<Page.BottomAppBar>
    <CommandBar>
        <CommandBar.Content>
            <Grid/>
        </CommandBar.Content>
        <AppBarButton Icon="OpenFile" Label="AppBarButton" Tapped="Loadmedia"/>
        <AppBarButton Icon="Next" Label="AppBarButton"/>
    </CommandBar>
</Page.BottomAppBar>

<Grid>
    <TextBox x:Name="outtext" HorizontalAlignment="Left" VerticalAlignment="Bottom" Height="73" Width="1343" Margin="315,0,0,10"/>
    <Image x:Name="mypic" HorizontalAlignment="Left" Height="765" Margin="48,45,0,0" VerticalAlignment="Top" Width="1783" FocusVisualPrimaryBrush="Black"/>
</Grid>
</Page>

А это код C #:

    public MainPage()
    {
        this.InitializeComponent();
    }

    private async void Loadmedia(object sender, TappedRoutedEventArgs e)
    {
        var picker = new FileOpenPicker();
        Image img = sender as Image;

        picker.ViewMode = PickerViewMode.Thumbnail;

        picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

        picker.FileTypeFilter.Add(".jpg");

        StorageFile file = await picker.PickSingleFileAsync();

        outtext.Text = file.Path;

        mypic.UriSource = new BitmapImage(new Uri(file.Path));



    }

}

1 Ответ

0 голосов
/ 31 августа 2018

Установите источник BitmapImage с помощью SetSourceAsync и потока, открытого из StorageFile, вместо того, чтобы использовать только путь StorageFile. Приложение не имеет разрешения на прямой доступ к пути и должно проходить через файловый брокер через StorageFile.

В документации BitmapSource.SetSourceAsync приведен пример фрагмента кода, который, по сути, выглядит так, как если бы он был изменен для имен ваших переменных:

// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
     // Set the image source to the selected bitmap
     BitmapImage bitmapImage = new BitmapImage();
     // Decode pixel sizes are optional
     // It's generally a good optimisation to decode to match the size you'll display
     bitmapImage.DecodePixelHeight = decodePixelHeight;
     bitmapImage.DecodePixelWidth = decodePixelWidth;

     await bitmapImage.SetSourceAsync(fileStream);
     mypic.Source = bitmapImage;
}

Ознакомьтесь с Простым образцом и Базовым входным образцом для примеров поворота, масштабирования и т. Д.

...