Некоторые из вас, возможно, заметили, что UniShare имеет свою собственную папку в библиотеке изображений вашего устройства. Также есть некоторые другие приложения, такие как WhatsApp или Tweetium. Преимущества собственной папки вашего приложения очевидны:
- проще загружать изображения в ваше приложение
- пользователь всегда может отразить, какие картинки приходят из вашего приложения
- другое присутствие вашего приложения в ОС
- более высокая частота запоминания вашего приложения на сайте пользователя (что приводит к более частому использованию вашего приложения)
Этот пост покажет вам, как легко создать папку в библиотеке изображений, а также сохранять и читать файлы в / из этой папки.
подготовка
Во-первых, вам нужно добавить это с помощью операторов в ваше приложение:
using Windows.Storage; using Windows.Storage.Streams; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging;
Затем добавьте возможности библиотеки изображений в Package.appmanifest вашего приложения.
Если у вас есть приложение 8.1 Silverlight, вам нужно добавить его как в Package.appmanifest, так и в WMAppManifest.xml:
Тогда мы уже можем сгенерировать нашу папку с помощью одной строки кода (считается как для Silverlight, так и для приложений времени выполнения):
StorageFolder appFolder= await KnownFolders.PicturesLibrary.CreateFolderAsync("myCustomAppFolder", CreationCollisionOption.OpenIfExists);
Вы всегда должны использовать метод CreateFolderAsync вместе с CollisionOption ‘OpenIfExists’. Таким образом, ваше приложение будет открывать его каждый раз, когда вы собираетесь сохранить файл, но создает папку, если она еще не существует. Если вы сейчас перейдете в свою библиотеку изображений, вы еще не увидите свою папку, хотя она там есть (используйте приложение «Диспетчер файлов», чтобы проверить ее, если хотите). Папки заполняются только тогда, когда у них есть контент. Это то, что следующий шаг.
Сохранить файл изображения
Сохранение изображения также довольно просто. Сначала мы создаем StorageFile в нашей папке:
StorageFile myfile= await appFolder.CreateFileAsync("myfile.jpg", CreationCollisionOption.ReplaceExisting);
Это создает файл-контейнер, в который мы можем записать наше изображение. Чтобы сохранить изображение, мы собираемся асинхронно записать в него поток нашего изображения:
//asuming we have an Image control, replace this with your local code var img = myImage.Source as WriteableBitmap; //get fresh drawn image img.Invalidate(); using (Stream stream = await myfile.OpenStreamForWriteAsync()) { img.SaveJpeg(stream, img.PixelWidth, img.PixelHeight, 0, 100); }
Этот код работает как для приложений Windows Phone 8.1 Silverlight, так и для приложений времени выполнения. Если вы сейчас перейдете в свою библиотеку изображений, вы увидите папку вашего приложения, а также ваше сохраненное изображение. Довольно легко, правда?
Читайте изображения из папки нашего приложения
Чтение файла изображения также довольно просто. Вот код:
//open the picture library StorageFolder libfolder = KnownFolders.PicturesLibrary; //get all folders first IReadOnlyList<StorageFolder> folderList = await libfolder.GetFoldersAsync(); //select our app's folder var appfolder = folderList.FirstOrDefault(f => f.Name.Contains("myCustomAppFolder")); //get the desired file (assuming you know the file name) StorageFile picfile = await appPicturesFolder.GetFileAsync("myfile.jpg"); //generate a stream from the StorageFile var stream = await picfile.OpenAsync(FileAccessMode.Read); //generate a new image and set the source to our stream BitmapImage img = new BitmapImage(); img.SetSource(stream); //todo: work with the image
Чтобы получить нашу сгенерированную папку, нам нужно получить список папок в библиотеке, используя метод StorageFolder.GetFoldersAsync (). Затем мы запрашиваем этот список для папки нашего приложения. Если вы хотите получить список всех изображений в вашей папке, вы можете использовать метод StorageFile.GetFilesAsync () . То, что я сделал выше, это загрузил наш сохраненный файл. Наконец, я открыл поток из этого файла и назначил его новому BitmapImage, который можно использовать в нашем приложении.
Есть также много других опций, которые можно сделать с этими папками и файлами, это очень распространенный сценарий.
Как всегда, я надеюсь, что этот пост будет полезен для некоторых из вас.