Рисование дескриптора панелей в растровом изображении

#c# #wpf #winforms #mpv

Вопрос:

У меня есть WPF-приложение, в котором размещена WinformsPanel

 <WindowsFormsHost>
    <windowsForms:Panel 
        x:Name="PlayerHost">
    </windowsForms:Panel>
<WindowsFormsHost>
 

Затем я использую эту панель для отображения видео. Я использую Mpv.NET либ, чтобы сделать это.
Видеопроигрыватель инициализирован правильно:

 //panel.Handle is the windowsForms:Panel named PlayerHost 
player = new MpvPlayer(panel.Handle, Common.IO.FindLib.FindMpvLib(binaryPath));
player.Load(videoFilePath);
 

Теперь, если я попытаюсь нарисовать содержимое панелей, результирующее изображение останется пустым. Код для рисования изображения выглядит следующим образом:

 using (var bmp = new Bitmap(panel.ClientSize.Width, panel.ClientSize.Height))
{
    panel.DrawToBitmap(bmp, panel.ClientRectangle);
    bmp.Save(@"Some:path.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}
 

Чтобы было понятно: отображается видео. Я вижу видеоконтент. И я начинаю рисовать изображение, когда носитель правильно загружен. Я даже выгрузил команду рисования для нажатия кнопки. Итак, пока видео работало, я попытался сделать, так сказать, «захват кадра». Но изображение остается пустым.

Как я могу захватить содержимое панелей? Имеет ли это какое-то отношение к собственному дескриптору, предоставляемому видеопроигрывателю? Заранее спасибо.

Комментарии:

1. К вашему сведению, вы можете показывать видео непосредственно в форме WPF — для этого вам не нужно размещать панель форм. — Здесь нет информации о том, как вы на самом деле пытаетесь захватить кадр.

2. Вы имеете в виду элемент мультимедиа? Mpv кажется мне более надежным с большим разнообразием поддерживаемых кодеков. Последняя часть отображает захват. Видео отображается на панели, и моя идея сохранить содержимое панелей в растровом изображении не работает.

Ответ №1:

Содержимое панелей можно сохранить в растровом изображении с помощью следующего кода:

 using (Bitmap b = new Bitmap(panel.Width, panel.Height))
{
    panel.DrawToBitmap(b, new Rectangle(0, 0, b.Width, b.Height));
    b.Save("test.png");
}
 

Комментарии:

1. Это именно то, что я пробовал и что не сработало в этом контексте.