DirectShow 录制视频时,如何在视频上画线和输出文字
来源:互联网 发布:孙楠 知乎 编辑:程序博客网 时间:2024/06/08 18:22
下面的代码说明了如何在录制视频的时候在视频中加入文字或其他的形状
LONG cx, cy;
HRESULT hr;
hr = pWC->GetNativeVideoSize(&cx, &cy, NULL, NULL);
if (FAILED(hr))
{
Msg(TEXT("GetNativeVideoSize FAILED! hr=0x%x\r\n"), hr);
return hr;
}
HDC hdc = GetDC(hwndApp);
HDC hdcBmp = CreateCompatibleDC(hdc);
g_hFont=CreateFont(30, 10,0,0, 10, FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T("宋体"));
HFONT hOldFont = (HFONT) SelectObject(hdcBmp, g_hFont);
HPEN hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));
HPEN hOldPen = (HPEN) SelectObject(hdcBmp, hPen);
int nLength, nTextBmpWidth, nTextBmpHeight;
SIZE sz={0};
nLength = (int) _tcslen(szNewText);
GetTextExtentPoint32(hdcBmp, szNewText, nLength, &sz);
nTextBmpHeight = sz.cy;
nTextBmpWidth = 400/*sz.cx*/;
HBITMAP hbm = CreateCompatibleBitmap(hdc, nTextBmpWidth, nTextBmpHeight);
ReleaseDC(hwndApp, hdc);
BITMAP bm;
HBITMAP hbmOld;
GetObject(hbm, sizeof(bm), &bm);
hbmOld = (HBITMAP)SelectObject(hdcBmp, hbm);
RECT rcText;
SetRect(&rcText, 0, 0, nTextBmpWidth, nTextBmpHeight);
SetBkMode(hdcBmp,TRANSPARENT); //设置透明背景
SetTextColor(hdcBmp, g_rgbColors); // 文字颜色
HBRUSH hBrush=((HBRUSH)GetStockObject(NULL_BRUSH));
SelectObject(hdcBmp, hBrush);
// 在位图上画图
//输出文字
//TextOut(hdcBmp, 0, 0, szNewText, nLength);
DrawText(hdcBmp,szNewText,sizeof(szNewText),&rcText,DT_RIGHT);
//画线
MoveToEx(hdcBmp,10,10,NULL);
LineTo(hdcBmp,200,10);
//Ellipse(hdcBmp,0,0,100,nTextBmpHeight);
// Configure the VMR's bitmap structure
VMRALPHABITMAP bmpInfo;
ZeroMemory(&bmpInfo, sizeof(bmpInfo) );
bmpInfo.dwFlags = VMRBITMAP_HDC;
bmpInfo.hdc = hdcBmp;
g_nImageWidth = bm.bmWidth;
g_fBitmapCompWidth = (float)g_nImageWidth / (float)cx;
bmpInfo.rDest.left = 0.0f + X_EDGE_BUFFER;
bmpInfo.rDest.right = 1.0f - X_EDGE_BUFFER;
bmpInfo.rDest.top = (float)(cy - bm.bmHeight) / (float)cy - Y_EDGE_BUFFER;
bmpInfo.rDest.bottom = 1.0f - Y_EDGE_BUFFER;
bmpInfo.rSrc = rcText;
bmpInfo.fAlpha = TRANSPARENCY_VALUE;
SetColorRef(bmpInfo);
hr = pBMP->SetAlphaBitmap(&bmpInfo);
if (FAILED(hr))
Msg(TEXT("SetAlphaBitmap FAILED! hr=0x%x\r\n\r\n%s\0"), hr,
STR_VMR_DISPLAY_WARNING);
// Select the initial objects back into our device context
DeleteObject(SelectObject(hdcBmp, hbmOld));
DeleteObject(SelectObject(hdcBmp, hOldPen));
SelectObject(hdc, hOldFont);
DeleteObject(hbm);
DeleteDC(hdcBmp);
return hr;
- DirectShow 录制视频时,如何在视频上画线和输出文字
- DirectShow 视频上画线和输出文字
- 在DirectShow的视频图像上叠加线条和文字
- 在DirectShow的视频图像上叠加线条和文字
- 如何录制iPhone手机上的视频
- directshow音视频录制同步问题
- DirectShow 视频录制保存为avi文件
- EasyStream系列11之录制directshow视频
- 录制视频和音频
- DirectShow控制台输出和保存视频设备名称
- Android上实现视频录制
- Android上实现视频录制
- MAC上录制屏幕视频
- Directshow 如何在视频中插入水印Logo图片
- 如何使用Fraps录制视频
- 在服务器端录制语音视频
- 在服务端录制语音视频
- DirectShow视频采集和OpenCV
- 让自己规律起来
- DataTable行转列
- Android应用在不同版本间兼容性处理 .
- MFC中自由使用自定义消息
- 23、注解
- DirectShow 录制视频时,如何在视频上画线和输出文字
- sql面试题详解3
- PHP This! A Beginners Guide To Learning Object Oriented PHP
- 24、反射
- spring常见国际化错误以及原因
- Android图形系统之libui
- log4net配置及使用方法
- 用于Lucene的各中文分词比较
- 我所遇到的12306bug