2010-02-01 4 views
1

저는 스트리밍 비디오가 그려지는 하나의 창을 포함하는 activeX 컨트롤을 가지고 있습니다. 난 내가 즉, 대화 상자의 [알파 블렌딩] 계층화 속성과 함께 SetLayeredWindowAttributes (...)를 사용하거나 투명 설정 (다양한 방법으로 투명 또는 반투명 만든 다른 창에서 만든 별도의 대화 상자가 재산). 스트리밍 비디오를 그리는 창 위에 투명한 창 대화 상자 및 그리기 프리미티브를 유지하려면 어떻게해야합니까?

는 또한 나는 대화는 항상 스트리밍 비디오 창 위에 그릴의 창을 얻기 위해 시도하는 다양한 방법을 사용하려했지만 아무도 나를 위해 일을 입증 없다. 대화 상자에 버튼이 있거나 LineTo (...) 호출을 사용하여 투명한 표면에 그릴 경우 해당 버튼은 비디오 상단에 남아 있지 않습니다. SetWindowPos를 사용하여 두 윈도우의 z- 순서에 영향을 주려고했지만 "TopMost"와 같은 대화 상자 창 속성을 변경하려고했지만 아무런 효과가 없었습니다.

사람은 스트리밍 비디오를 통해 오버레이 창에 대한이 같은 뭔가를 시도하고 스트리밍 비디오 후 항상 전면 창을 그림에서 일할 수있는 Z-주문을받은 적이 있습니까?

업데이트 : 02/10/10 - LWA_COLORKEY를 사용하여 SetLayeredWindowAttributes (...)와 WS_EX_LAYERED 속성을 사용하여 시도해보고 내가 찾고있는 것을 달성했습니다. 레이어드 속성은 WS_CHILD 스타일과 함께 사용할 수 없으므로이 솔루션은 비디오 윈도우가있는 오버레이 윈도우 위치를 몇 가지 필수적으로 관리합니다. 또한 내가 제거하려고하는 다른 기이 한 일도 있습니다. 예를 들어, 비디오가있는 ActiveX 컨트롤 창이 IE 탭에 포함되어 있고 다른 탭으로 전환하면 오버레이 창의 컨트롤이 새 탭 위에 남아 있습니다 (WS_POPUP 스타일 사용시). 스위치를 결정하고 윈도우 가시성을 숨기는 다른 대안을 처리 할 대체 수단이 있는지 계속 조사하십시오.

답변

0

WS_EX_LAYERED 속성은 컬러 키가 사용되는 투명성을 달성한다. Transpaerent 오버레이는 비디오 앞에 유지되고 활성 스트리밍 비디오는 라이브로 유지됩니다. WS_CHILD 스타일은 계층화 된 스타일과 함께 사용할 수 없으므로 WS_POPUP이 사용되는 경우 추가 위치 관리가 필요합니다. 하위 창으로 오버레이를 사용할 수 없다는 추가 문제가 발생할 수 있습니다. - Q 업데이트를 참조하십시오.

0

많은 비디오 출력 코드가 하드웨어 오버레이를 사용하므로 윈도우가 앞에 있으면 오버레이가 작동하지 않거나 픽셀이 전혀없는 부분을 그릴 수 없습니다.

하드웨어 오버레이 비디오 그리기 코드는 CPU와 메모리 대역폭을 많이 절약 할 수 있습니다 현재 표시 형식의 이외의 형식으로 프레임을 제시 할 수 있습니다. 많은 비디오 압축 포맷은 YUV 기반으로하기 때문에 내 경험에

은, 오버레이는 YUV 형식이 아닌 RGB 보통이다. 따라서 비디오 하드웨어는 화면 버퍼가 아닌 YUV 이미지에서 일부 픽셀을 얻습니다. 따라서 비디오 스트림의 렌더링 코드 경로에 직접 삽입하지 않으면 이러한 픽셀에 영향을 줄 수 없습니다. LWA_COLORKEY를 사용 SetLayeredWindowAttributes (...)와

+0

저는 미디어 (비디오) 프레임 워크를 사용하고 있습니다. 우리 회사의 다른 개발 그룹이 개발되었고이 코드에 윈도우 핸들을 제공하고 있습니다. Direct3d를 사용하여 비디오를 렌더링하는 파이프 라인의 렌더링 플러그인에서이 핸들을 사용하고 있습니다. UI 그룹의 구성원은 동영상 맨 위에 영구적으로 레이어가있는 다른 응용 프로그램을 가지고 있지만 QT (교차 플랫폼 응용 프로그램 및 UI 프레임 워크)를 사용하고 있습니다. 그들은 Qt :: FramelessWindowHint를 사용하여 항상 z 순서 위에 머무르는 경계선없는 윈도우를 생성하도록 지정했습니다. Qt에서 할 수 있다면 VC++에서 가능해야합니다. – flawlesslyfaulted

+1

하드웨어 오버레이가 아니므로이 주석을 무시해도됩니다. –