DirectShow 视频上画线和输出文字
为了方便,就直接在视频上显示了,而没有动态的输出文字和用鼠标移动画线,不过是一样的原理,只是动态就要捕获鼠标状态的消息
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 structureVMRALPHABITMAP 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 contextDeleteObject(SelectObject(hdcBmp, hbmOld));DeleteObject(SelectObject(hdcBmp, hOldPen));SelectObject(hdc, hOldFont);DeleteObject(hbm);DeleteDC(hdcBmp);return hr;
DirectShow 视频上画线和输出文字相关推荐
- cv2 在图片上画线
import cv2 # capture=cv2.VideoCapture(0) img=cv2.imread('../../img/street.jpg',1) cv2.line(img,(0,0) ...
- html文字前画线代码,在div上画线
拖动 要在div上拖放图标,我可以在div上放置图标并轻松拖动它们.但我不知道如何实现"Scribble"功能(例如,使用类似鼠标的笔在div上画线,就像在画布上一样). 下面是我 ...
- Unity在Canvas上画线(Draw Line)实现
# 前言 目前Unity官方提供的UI扩展包中包含了UILineRenderer组件,本篇实现与UILineRenderer实现一致,主要讲解其基本使用与实现过程.不想看的同学可以直接下载官方扩展包. ...
- ArcGIS API for JavaScript根据两个点坐标在地图上画线
ArcGIS API for JavaScript根据两个点坐标在地图上画线 比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new ...
- QT 实现Label上画线
实现功能:Label上有一张图片,用画笔在图像上画线. 一.头文件添加以下函数和变量 QMouseEvent * mouseEvent;void mousePressEvent(QMouseEvent ...
- OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...
- 如何使用Graphics2D在一张图片上画线(包括箭头)
有这样一个需求,在一张图片上画几条线并保存,如图所示: 已知各个点的x,y坐标,坐标范围是[0.000,1],即将横纵方向分成1000份. 我们可以使用java.awt.Graphics2D的库来实现 ...
- OpenLayers 在地图上画线,获取点坐标(以天地图为例)
应用场景: 最近在开发过程中,有个需求,需要在天地图中画线,结束后获取对应的坐标集合,查阅 OpenLayers API 和网上的相关资料后得以实现,特此记录. 因为直线间的点是无数个,我们不可能去获 ...
- 哈尔滨一同学用笔在纸上画线,一只瓢虫跟着爬爬爬。
难以置信!哈尔滨一位同学下课后,一只瓢虫突然飞到了他的书本上,他用毛笔在纸上画了一条线,他所画的地方,瓢虫也跟着他. 很有可能,这只瓢虫被墨水的气味所吸引,因为它的气味很快就会变得浓烈起来,而瓢虫则对 ...
最新文章
- Ant Design Vue 表格内编辑(附完整源码及效果图)
- windows下部署MySQL 8.0.11
- 想不明白的时候可以干的十件事情
- 2.安装号mysql后当重启Linux服务器之后发现进入不了的解决方案
- 滴滴2017在线笔试有感
- [react] React根据不同的环境打包不同的域名?
- 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现
- linux bochs 网卡,Bochs 在Windows和Linux下配置对比
- 有向无环图描述表达式
- 哈斯(Hasse)图
- linux中^]是如何输出的
- c语言int doubt,c语言错误error: incompatible types in assignment
- 腾冲樱花谷原生态旅游景区公园网站制作完成
- 机器学习【吴恩达|周志华|李宏毅|算法】清单
- Stream流的常用方法以及代码练习
- 通过md5值删除重复文件
- php中的nl2br函数,PHP nl2br()函数与示例
- Xilinx 7系列FPGA之Kintex-7产品简介
- 西瓜书笔记5:神经网络
- 淘宝官方的天天特卖活动应该如何进行进行设置?