2010-02-16 9 views
6

나는 응용 프로그램을 만들고 있는데 문제는 해결할 수없는 것 같습니다. 응용 프로그램은 vC++로 작성됩니다. 내가해야 할 일은 YUV 비디오 피드 위에 텍스트가 표시되도록하는 것입니다.위에 텍스트가있는 그림 그리기

지금은 GD와 DirectDraw 오버레이의 비디오를 사용하여 OnPaint 메서드에서 텍스트를 그리면 올바르게 작동합니다. 나는 그것이 많은 문제를 야기하기 때문에 오버레이를 제거해야한다. 일부 비디오 카드, 비스타, 7 등에서는 작동하지 않을 것입니다.

보다 호환적인 방식으로 같은 것을 완료하는 방법을 찾아 낼 수 없습니다. DirectDraw를 백 버퍼와 함께 사용하여 비디오를 그릴 수 있으며 기본 버퍼에 잘 복사 할 수 있습니다. 여기서 문제는 비디오가 새로 고침되는 시간 때문에 GDI에서 그려지는 텍스트가 깜박이는 것입니다. 가능하다면 텍스트가 잘 작동하도록 코드를 그대로 유지하고 싶습니다.

DirectDraw 버퍼 나 메모리 버퍼 등에 텍스트를 직접 그려 넣은 다음 백 버퍼로 blt 할 수 있습니까? 나는 다른 방법을 모두 함께 볼까? 두 가지 중요한 OS는 XP와 7.입니다. 누구나 아이디어가 있다면 알려주세요. 나는 그들을 테스트 할 것입니다. 감사.

+0

+1 질문 : – gyurisc

답변

2

은 microsoft.com에 DirectShow를하고 시세 샘플을 들여다보십시오 :

DirectShow Ticker sample

이 샘플은 비디오와 텍스트를 혼합하는 비디오 믹싱 렌더러를 사용합니다. IVMRMixerBitmap9 인터페이스를 사용하여 비디오 창 하단에 텍스트를 혼합합니다.

DirectShow는 오디오 또는 비디오 스트림을 재생하기위한 필터 그래프를 작성하여 비디오 및 오디오 샘플의 다양한 효과와 조작을 위해 다른 필터를 추가합니다.

1

DirectShow의 Video Mixing Renderer를 사용하는 대신 ISampleGrabber 인터페이스를 사용할 수도 있습니다. 장점은 다른 렌더러에서도 사용할 수있는 필터입니다. 예를 들어 화면에 비디오를 표시하지 않고 네트워크를 통해 스트리밍하거나 파일로 덤핑하는 경우입니다.

+1

단점은 소프트웨어에서 직접 믹싱을하고 하드웨어 지원 디코딩 또는 디인터레이싱을 비활성화한다는 것입니다. vmr 믹서 비트 맵 API를 사용하는 경우 하드웨어 지원 알파 블렌딩을 사용할 수 있습니다. –

+0

+1은 ISampleGrabber의 경우입니다. GDI +를 사용하여 .NET에서 실시간 비디오에 페인트하기 위해 광범위하게 사용하고 있기 때문입니다. 심지어 YUY2 표면에서도 :) –