Вопрос по windows-phone-8.1, windows, c#, windows-runtime – Сохранить миниатюру файла как изображение в среде выполнения Windows

0

Я хочу получить миниатюру файлов, хранящихся в папке «Видео», и сохранить их как изображение в моей локальной папке. Вот мой код для получения файлов.

var v = await KnownFolders.VideosLibrary.GetFilesAsync();
foreach (var file in v)
{
    var thumb = await file.GetScaledImageAsThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);
    BitmapImage Img = new BitmapImage();
    Img.SetSource(thumb);
    await ApplicationData.Current.LocalFolder.CreateFolderAsync("VideoThumb");
    var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
              "VideoThumb\\" + file.Name, CreationCollisionOption.FailIfExists);
    var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
    //I don't know how to save thumbnail on this file !
}

Мой проект - приложение C # для Windows Phone 8.1 Runtime.

Ваш Ответ

1   ответ
0

тебе не нужноBitmapImage, так как миниатюра предоставляет поток, который вы можете записать непосредственно в файл,вы не обрабатываете случай, когда метод создания файла не удается (файл существует),Метод create folder вызовет исключение, поскольку папка создается (или уже существует) с первым файлом в foreach. Вместо этого создайте / откройте папку вне foreach,также создает изображение сfile.Name не очень хорошая идея, поэтому это видео и их расширение, вероятно, будетmp4 / галлон / другое неJPG / PNG / другие,не забудьте добавитьвозможности вpackageappx.manifest файл.

Я думаю, что код ниже должен сделать эту работу:

private async Task SaveViedoThumbnails()
{
    IBuffer buf;
    StorageFolder videoFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("VideoThumb", CreationCollisionOption.OpenIfExists);
    Windows.Storage.Streams.Buffer inputBuffer = new Windows.Storage.Streams.Buffer(1024);

    var v = await KnownFolders.VideosLibrary.GetFilesAsync();
    foreach (var file in v)
    {
        var thumb = await file.GetScaledImageAsThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);
        var imageFile = await videoFolder.CreateFileAsync(file.DisplayName + ".jpg", CreationCollisionOption.ReplaceExisting);
        using (var destFileStream = await imageFile.OpenAsync(FileAccessMode.ReadWrite))
            while ((buf = (await thumb.ReadAsync(inputBuffer, inputBuffer.Capacity, Windows.Storage.Streams.InputStreamOptions.None))).Length > 0)
                await destFileStream.WriteAsync(buf);
    }
}
Спасибо, я новичок в Windows Runtime. До этого я работал над Silverlight, и я многого здесь не знаю. действительно спасибо за вашу помощь. не могли бы вы сказать мне, как я могу преобразовать эти файлы в URI или битовую карту изображения, чтобы показать? Ali NGame
хмммммм спасибо;) ms-appdata: /// local / ... Еще раз спасибо. ты мне очень помог Ali NGame
@AliNGame Что касается Ури, я бы предложил прочитатьна MSDN а такжездесь, в MSDN, Что касается настройки изображения из StorageFile, вы найдете несколько сообщений на SO. Romasz

Похожие вопросы