прозрачная панель наложения веб-камеры directshow.net

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

Пример изображения

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

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, если этого можно избежать, я думал, что это будет простой способ избежать этого.


person PeteT    schedule 10.10.2011    source источник


Ответы (2)


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

person PeteT    schedule 14.10.2011
comment
Если вы довольны своим ответом, вы должны отметить его как ответ. - person Simon Mourier; 18.10.2011
comment
Я оставил это немного, чтобы посмотреть, есть ли какие-либо другие предложения, поскольку есть открытая награда, и кто-то еще может предложить альтернативы для тех, кто посмотрит на это позже. - person PeteT; 19.10.2011
comment
Это полностью спасло меня! Способ пойти. Раньше я не знал об этой библиотеке. - person ashays; 02.11.2011

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

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

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

person Roman R.    schedule 12.10.2011