동영상이 재생되는 영역을 겹쳤을 때 깜빡이는 문제 해결법 아시는 분..ㅠㅠ
글쓴이: iam8250 / 작성시간: 수, 2014/11/05 - 6:18오후
FFMpeg으로 동영상 재생하는 프로그램이 있습니다. 어찌어찌 플레이어는 만들어졌는데
2개의 화면에서 서로 다른 동영상이 나오는데 부분적으로 겹쳐져야 합니다.
그런데 문제가 겹치는 부분이 깜빡거리거나 아니면 위로 올라와야 하는 화면이 아래로 내려가야 깜빡 거리지 않습니다.
그림에서 B가 위로 올라오면서 깜빡거리지 않고 재생되게 하고 싶은데..
A가 위에 있는 경우는 깜빡 거리지 않고 B가 위에 있으면 깜빡거립니다.
왜 그런건지 알 수가 없네요..ㅠㅠ
이 문제를어떻게 해야 고칠 수 있을까요?
고수님들 답변 부탁 드립니다.
혹시나 싶어 부분적으로 소스 함께 올립니다.
도와주세요~ㅠㅠ
void Create_render_vide0() { for( int i= 0; i <MAX_WND; i++ ) { m_lst_video_render[i] = new CVideoWnd; CString szTitle; szTitle.Format(_T("VideoWnd%d"),i); m_lst_video_render[i]->Create(m_hWnd, CRect(0,0,0,0), szTitle,WS_CHILD|WS_VISIBLE); m_lst_video_render[i]->Initialize(i, m_hWnd); m_lst_video_render[i]->SetFocusWnd(FALSE); } long nValueRX = ::GetWindowLong(m_lst_video_render[1]->m_hWnd,GWL_STYLE); nValueRX |= WS_BORDER /*| WS_CLIPSIBLINGS*/; ::SetWindowLong(m_lst_video_render[1]->m_hWnd,GWL_STYLE,nValueRX); long nValueTX = ::GetWindowLong(m_lst_video_render[0]->m_hWnd,GWL_STYLE); nValue |= WS_CLIPSIBLINGS; ::SetWindowLong(m_lst_video_render[0]->m_hWnd,GWL_STYLE,nValueTX); m_lst_video_render[TX]->SetFocusWnd(TRUE); } void CVideoWnd::DrawImg( ) { m_csPaint.Lock(); HDC hDC = ::GetDC(m_hWnd); CRect rectDraw; GetClientRect(rectDraw); HDC mem_dc = ::CreateCompatibleDC( hDC ); HBITMAP h_bitmap = ::CreateCompatibleBitmap( hDC , rectDraw.Width() , rectDraw.Height() ); HBITMAP h_old_bitmap= (HBITMAP)::SelectObject( mem_dc , h_bitmap ); if(m_pCurImg != NULL) { CRect rcSrc(0,0, m_dwWidth , m_dwHeight); BITMAPINFO* ppInfo = &(m_BmpInfoOrg); ::SetStretchBltMode(mem_dc, COLORONCOLOR); ::StretchDIBits(mem_dc,rectDraw.left, rectDraw.top, rectDraw.Width(), rectDraw.Height(), rcSrc.left, rcSrc.top, rcSrc.Width(), rcSrc.Height(),m_pCurImg, ppInfo, DIB_RGB_COLORS,SRCCOPY); HBRUSH hBrush; hBrush = ::CreateSolidBrush(RGB(0,0,0)); ::ExcludeClipRect(mem_dc,rectDraw.left, rectDraw.top, rectDraw.left +rectDraw.Width(), rectDraw.top+rectDraw.Height()); ::FillRect(mem_dc, rectDraw, hBrush); } ::BitBlt( hDC , rectDraw.left, rectDraw.top, rectDraw.Width(), rectDraw.Height() ,mem_dc , 0, 0, SRCCOPY ); ::SelectObject( mem_dc , h_old_bitmap ); ::DeleteObject( h_bitmap ); ::DeleteDC( mem_dc ); ::ReleaseDC( m_hWnd , hDC); m_csPaint.Unlock(); ::ReleaseDC(m_hWnd, hDC); }
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 21.35 KB |
Forums:
댓글 달기