Я прикрепил видео к холсту. На холсте пользователь может нарисовать линию, прямоугольник и т. д., и эти нарисованные объекты будут скрыты или видимы в зависимости от временного интервала. Затем пользователь может сохранить это видео с нарисованным объектом. Для этой цели я использовал следующий код. Проблема в том, что сохранение занимает время, почти равное длине видео. Как я могу сократить время сохранения или есть ли другой быстрый способ сохранить обрезанный холст с нарисованным объектом?
Я использовал библиотеку OpenCVSharp для создания видео из обрезанного холста
Application.Current.Dispatcher.Invoke(() =>
{
canvas.VideoPlayer.mp1.Clock.Controller.SeekAlignedToLastTick(timeSpan1, System.Windows.Media.Animation.TimeSeekOrigin.BeginTime);
});
var writer = new VideoWriter(fileName, OpenCvSharp.FourCC.DIVX, frameRate, new OpenCvSharp.Size(vidSize.Width, vidSize.Height));
for (int i = startFrame; i < endFrame; i++)
{
CroppedBitmap croppedImage = new();
Application.Current.Dispatcher.Invoke(() =>
{
canvas.VideoPlayer.mp1.Position.Add(frameTimeInterval);
canvas.VideoPlayer.ShowHideToolsSaveAs(frame);
// --------> some time here it shows insufficient memeory when video is around 2 mins
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Default);
rtb.Render(canvas);
// create cropped image
croppedImage = new CroppedBitmap(rtb, vidSize);
});
if (croppedImage != null)
{
System.Drawing.Bitmap bmp = new(width, height);
byte[] byteArray = new byte[1];
Application.Current.Dispatcher.Invoke(() =>
{
bmp = BitmapFromSource(croppedImage);
byteArray = BitmapToByteArray(bmp);
});
Mat mat = new();
mat = BitmapConverter.ToMat(bmp);
writer.Write(mat);
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -much-time
C# wpf Сохранение изображений обрезанного холста в видео занимает много времени ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение