Как вы захватываете текущий кадр из MediaElement в WinRT (8.1)?
Я пытаюсь реализовать функцию скриншота в приложении WinRT, которое показывает видео через MediaElement. У меня есть следующий код, он сохраняет скриншот, которыйs размер MediaElement, но изображение пустое (полностью черное). Пробовал с различными типами медиа файлов. Если я нажимаю клавишу Win + Vol Down на Surface RT, снимок экрана содержит содержимое фрейма Media, но если я использую следующий код, он 'Чернота вокруг :(
private async Task SaveCurrentFrame()
{
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(Player);
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
MultimediaItem currentItem = (MultimediaItem)this.DefaultViewModel["Group"];
StorageFolder currentFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var saveFile = await currentFolder.CreateFileAsync(currentItem.UniqueId + ".png", CreationCollisionOption.ReplaceExisting);
if (saveFile == null)
return;
// Encode the image to the selected file on disk
using (var fileStream = await saveFile.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);
encoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)renderTargetBitmap.PixelWidth,
(uint)renderTargetBitmap.PixelHeight,
DisplayInformation.GetForCurrentView().LogicalDpi,
DisplayInformation.GetForCurrentView().LogicalDpi,
pixelBuffer.ToArray());
await encoder.FlushAsync();
}
}
Здесь MultimediaItem - мой класс View Model, который помимо прочего имеет свойство UniqueId, которое 'Строка.
Игрок» это название медиа-элемента.
Что-то не так с кодом, или этот подход не так, и яХотите попасть в окопы с C ++?
Постскриптум Я заинтересован только в WinRT API.
Обновление 1 Похоже, RenderTargetBitmap не 'не поддерживает это, документация MSDN разъясняет этоhttp://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.imaging.rendertargetbitmap , Я'Буду признателен за любые указания о том, как сделать это с помощью DirectX C ++. Это важная задача для меня, поэтому явзломаю это так или иначе и сообщу с решением.