Есть ли способ переместить некоторые изображения на экран, и пока они движутся, записать сцену как видео? - PullRequest
0 голосов
/ 03 ноября 2019

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

Я хочу указать, что я не хочу записывать рабочий стол или какую-то его часть, но содержимое реального окна, в котором движутся изображения (поэтому окно также можно свернуть). Также, если возможно, я хочу иметь возможность установить нестандартный размер для моего вида, где все будет происходить.

С чего мне начать?

Я уже пробовал с WPF, но, поскольку пользовательский интерфейс однопоточный, я не могу сделать снимок экрана, пока что-то движется по нему.

Какую библиотеку вы мне предложите? Есть ли похожие проекты с открытым исходным кодом, из которых я могу поучиться? Любое предложение, которое я приветствовал!

1 Ответ

1 голос
/ 04 ноября 2019

Вот код, который я недавно написал для этого, он циклически перебирает количество кадров и отображает элемент управления (в данном случае Canvas) в PNG:

private void Export(int frame)
{
    // force the control to update after any changes you've just made
    theCanvas.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);

    // render the control into a bitmap
    RenderTargetBitmap bitmap = new RenderTargetBitmap(1920, 1080, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(theCanvas);

    // save the bitmap out as a PNG
    using (var stream = File.Create($"Animation/Frame_{frame.ToString("D3")}.png"))
    {
        var encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmap));
        encoder.Save(stream);
    }
}

Затем вы можете использовать ffmpeg до упакуйте эти PNG в выбранный вами формат файла фильма.

...