当前位置: 代码迷 >> 多媒体/流媒体开发 >> 怎么实现directshow的双屏显示
  详细解决方案

怎么实现directshow的双屏显示

热度:2843   发布时间:2013-02-26 00:00:00.0
如何实现directshow的双屏显示?
如题,dshow所编写的应用程序是不能跨屏幕显示的,各位高手不知道有没有办法象采用directdraw一样来进行跨屏显示?比如多个显示器来组合起来显示一部电影?
谢谢了

------解决方案--------------------------------------------------------
把屏幕划分成几个区域,做好标记。
再分别将每个区域的屏幕传到相应位置的显示器即可
------解决方案--------------------------------------------------------
你可以写一个filter把解码出来的图像剪切一下,一个输入pin两个输出pin到两个窗口
你也可以自己写video renderer
http://msdn2.microsoft.com/en-us/library/ms787671.aspx
------解决方案--------------------------------------------------------
你可以采用复制Transfrm的Filter的格式来定义各个分支出口的媒体格式,注意要修改其中的宽和高(否则显示不完全)。也可采用以下方式手动设置

CMediaType *pmt = new CMediaType ;

pmt->InitMediaType();

VIDEOINFOHEADER vih;
memset( &vih, 0, sizeof( vih ) );
vih.bmiHeader.biCompression = BI_RGB; // 制定位图是否压缩,BI_RGB, BI_RLE8, BI_RLE4, BI_BITFIELDS; 后几种不常用
vih.bmiHeader.biBitCount = 24; // 表示位图颜色要用的位数,1(黑白),4(16色),8(256色),24(真色彩)
vih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); // 这个结构的长度,固定数值40
vih.bmiHeader.biWidth = 320; // 你输出的宽和高
vih.bmiHeader.biHeight = 240; // 你输出的宽和高
vih.bmiHeader.biPlanes = 1; // 必须是 1
vih.bmiHeader.biSizeImage = GetBitmapSize(&vih.bmiHeader); // 位图数据占的字节数,宽度必须是4的整数倍
vih.bmiHeader.biClrImportant = 0 ; // 位图中的重要颜色数,为0表示所有颜色都重要

pmt->SetType(&MEDIATYPE_Video);
pmt->SetFormatType(&FORMAT_VideoInfo);
pmt->SetTemporalCompression(FALSE);

pmt->SetFormat( (BYTE*) &vih, sizeof( vih ) );
pmt->SetSubtype(&MEDIASUBTYPE_RGB24);

pmt->SetSampleSize(vih.bmiHeader.biSizeImage);


MyOutputPint1->SetupMediaType(pmt,
pmt->Format(),
pmt->FormatLength() ) ;

delete pmt;
  相关解决方案