예제 #1
0
/******************************Public*Routine******************************\
* SetAppImage
* DON'T WORK IN RENDERLESS MODE
\**************************************************************************/
BOOL
CMpegMovie::SetAppImage(
    VMRALPHABITMAP* lpBmpInfo
    )
{
	if ( m_Vw ) {

		// Windowed movie playback can't have app image.
		return FALSE;

	}	else {


		IVMRMixerBitmap* pBmp;
		HRESULT hres = m_Wc->QueryInterface(IID_IVMRMixerBitmap, (LPVOID *)&pBmp);
		if(SUCCEEDED(hres))
		{
			hres = pBmp->SetAlphaBitmap(lpBmpInfo);
			pBmp->Release();
		}
		else
		{
			char sz[256]; 
			AMGetErrorText(hres, sz, 256);
		}

		return hres;
	}
}
예제 #2
0
bool CImageMixer_VMR7::SetBitmap(HBITMAP hbm,int Opacity,COLORREF TransColor,RECT *pDestRect)
{
	IVMRMixerBitmap *pMixerBitmap;
	IVMRWindowlessControl *pWindowlessControl;
	LONG NativeWidth,NativeHeight;
	BITMAP bm;
	VMRALPHABITMAP ab;
	HRESULT hr;

	if (!CreateMemDC())
		return false;
	if (FAILED(m_pRenderer->QueryInterface(IID_IVMRMixerBitmap,
									reinterpret_cast<LPVOID*>(&pMixerBitmap))))
		return false;
	m_pRenderer->QueryInterface(IID_IVMRWindowlessControl,
							reinterpret_cast<LPVOID*>(&pWindowlessControl));
	hr=pWindowlessControl->GetNativeVideoSize(&NativeWidth,&NativeHeight,NULL,NULL);
	if (FAILED(hr) || NativeWidth==0 || NativeHeight==0) {
		NativeWidth=1440;
		NativeHeight=1080;
	}
	pWindowlessControl->Release();
	::SelectObject(m_hdc,hbm);
	ab.dwFlags=VMRBITMAP_HDC;
	if (TransColor!=CLR_INVALID)
		ab.dwFlags|=VMRBITMAP_SRCCOLORKEY;
	ab.hdc=m_hdc;
	ab.pDDS=NULL;
	::GetObject(hbm,sizeof(BITMAP),&bm);
	::SetRect(&ab.rSrc,0,0,bm.bmWidth,bm.bmHeight);
	ab.rDest.left=(float)pDestRect->left/(float)NativeWidth;
	ab.rDest.top=(float)pDestRect->top/(float)NativeHeight;
	ab.rDest.right=(float)pDestRect->right/(float)NativeWidth;
	ab.rDest.bottom=(float)pDestRect->bottom/(float)NativeHeight;
	ab.fAlpha=(float)Opacity/100.0f;
	ab.clrSrcKey=TransColor;
	hr=pMixerBitmap->SetAlphaBitmap(&ab);
	pMixerBitmap->Release();
	if (FAILED(hr)) {
		::SelectObject(m_hdc,m_hbmOld);
		return false;
	}
	return true;
}