directshow.net веб-камера наложение прозрачной панели - PullRequest
2 голосов
/ 10 октября 2011

Я пытаюсь использовать веб-камеру для фотографирования значков. Чтобы сделать это, я использовал библиотеку directshow.net и примеры, в результате чего у меня появился экран предварительного просмотра веб-камеры в .NET, отображаемый в виде картинки в соответствии с примером DxSnap. Теперь я хочу наложить его на прямоугольник, который можно перемещать и изменять размер (фиксированное соотношение сторон), чтобы конечный пользователь перетаскивал его поверх человека, чтобы получить изображение с веб-камеры в соответствующей точке. Так это будет выглядеть примерно так:

Example Image

Для этого я подумал, что нет проблем, источник веб-камеры помещен в графическое окно. Я просто наложу его на прозрачную панель или рамку рисунка и использую обычный код .NET, чтобы создать прямоугольник. Если я наложу обычную панель, она появится над выводом веб-камеры DirectShow, как и ожидалось. Однако, если я использую этот трюк для реализации прозрачной панели или Picturebox:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams createParams = base.CreateParams;
        createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
        return createParams;
    }
}

protected override void OnPaintBackground(PaintEventArgs e)
{
   // Do not paint background.
}

К сожалению, он появляется под выводом directshow. Есть ли простой способ обойти этот или альтернативный метод. Я предпочел бы не углубляться в directshow.net, если этого можно избежать, я подумал, что это будет легкий способ избежать этого.

Ответы [ 2 ]

1 голос
/ 14 октября 2011

В итоге я использовал проект AForge.NET вместо DirectShow.NET. У него есть по-настоящему замечательные сэмплы, и рисование его видеовыхода так же просто, как обработка события OnPaint видеоплееров, поскольку он вызывает его для каждого кадра. Кажется, он требует немного больше ресурсов процессора, но ничего лишнего.

0 голосов
/ 12 октября 2011

Проблема с наложением состоит в том, что видео отображается не так, как обычная графика с графическим интерфейсом, а с помощью специального метода, который создает поверхности без RGB (обычно) на видеоадаптере.В результате этого вы не можете перекрывать видео с окнами или использовать GDI напрямую.

Вы по-прежнему можете изменять видео в пути или накладывать видео с помощью специального микшера.

См. Этот вопрос: Отображение полупрозрачного объекта Image через IVideoWindow в C # с использованием DirectShow.NET , поскольку в нем обсуждается аналогичный запрос.

...