delphi DSPACK 中TVideoWindow上摄像头捕获的视频中想对视视频中的人脸进行框选,但利用canvas属性框选不会出现在视频上面

suifeng625172 2016-12-01 04:53:49
delphi DSPACK 中TVideoWindow上摄像头捕获的视频中想对视视频中的人脸进行框选,但利用TVideoWindow控件的canvas属性框选不会出现在视频上面,视频上叠加一个image,利用image的canvas属性也不能实现,canvas属性绘制的框会被视频盖住。
请问大神怎么解决。
...全文
1254 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
suifeng625172 2016-12-06
  • 打赏
  • 举报
回复
引用 11 楼 suiyunonghen 的回复:
因为刷新很快,你用Image看不到很正常,所以,你只能根据我所说的去做处理,先用WM_Timer处理,不行就HookDirectx的Surface,然后处理
TVideoWindow控件播放摄像头视频会触发WM_Timer消息吗?如何拦截我在窗体中写了一个拦截的过程没法拦截到 procedure WM_SystemCmd(var Msg:TMessage);message WM_Timer;
不得闲 2016-12-06
  • 打赏
  • 举报
回复
因为刷新很快,你用Image看不到很正常,所以,你只能根据我所说的去做处理,先用WM_Timer处理,不行就HookDirectx的Surface,然后处理
suifeng625172 2016-12-05
  • 打赏
  • 举报
回复
引用 8 楼 suiyunonghen 的回复:
如果是VFW模式的,视频的刷新是用的时钟,你只需要拦截视频窗口的WM_TImer消息,然后在这个里面即时划伤你的内容则可
没有用VFW接口用的是dspack 在TVideoWindow控件上显示摄像头视频但是我现在需要在视频上画框。
suifeng625172 2016-12-05
  • 打赏
  • 举报
回复
引用 7 楼 lyhoo163 的回复:
Image透明的,放在第一层,视频放在底层。 另外,可以通过Panel,在DSVideoWindowEx1上画图。
我测试过了在dspack 中TVideoWindow控件上面叠加image但是没用,在TVideoWindow控件上的控件都会被隐藏掉
lyhoo163 2016-12-03
  • 打赏
  • 举报
回复
Image透明的,放在第一层,视频放在底层。 另外,可以通过Panel,在DSVideoWindowEx1上画图。
不得闲 2016-12-03
  • 打赏
  • 举报
回复
如果是VFW模式的,视频的刷新是用的时钟,你只需要拦截视频窗口的WM_TImer消息,然后在这个里面即时划伤你的内容则可
都先生 2016-12-02
  • 打赏
  • 举报
回复
绘制一次是不行的,需要不停的重画,paint事件是不停的刷新的。
mdejtod 2016-12-02
  • 打赏
  • 举报
回复
.... 你得让bitmap带有alpha通明通道,你这样画,它的alpha是全透明的,使用GDI+的方式画,可以带透明通道
suifeng625172 2016-12-02
  • 打赏
  • 举报
回复
引用 4 楼 mdejtod 的回复:
Bitmap.PixelFormat := pf32bit; 要32位带透明通道的图片
我把Bitmap.PixelFormat := pf32bit;这句代码加上去了还是一样的没叠加,请问是还需要设置其他的什么属性吗?
mdejtod 2016-12-02
  • 打赏
  • 举报
回复
Bitmap.PixelFormat := pf32bit; 要32位带透明通道的图片
suifeng625172 2016-12-02
  • 打赏
  • 举报
回复
引用 1 楼 mdejtod 的回复:
var GVMRBitmap : TVMRBitmap; GVMRBitmap:= TVMRBitmap.Create(VideoWindow); GVMRBitmap.Options := [vmrbSrcColorKey]; GVMRBitmap.LoadBitmap(Bitmap); //Bitmap :事先画好的图片 GVMRBitmap.ColorKey := clWhite; GVMRBitmap.Source := GVMRBitmap.Canvas.ClipRect; GVMRBitmap.DrawTo(x,y,w,h, 1.0) ;//x,y,w,h :需要绘制的区域,即在VideoWindow上的目标区域 GVMRBitmap.Alpha := 1.0;
var GVMRBitmap : TVMRBitmap; Bitmap:TBitmap; begin try Bitmap:=TBitmap.Create; Bitmap.Canvas.Brush.Color:=clGreen; // Bitmap.Canvas.Pen.Color:=clRed; // Bitmap.Canvas.Pen.Width:=2; Bitmap.Width:=200; Bitmap.Height:=300; Bitmap.SaveToFile('C:\11.bmp'); GVMRBitmap:= TVMRBitmap.Create(VUSB); GVMRBitmap.Options := [vmrbSrcColorKey]; GVMRBitmap.LoadBitmap(Bitmap); //Bitmap :事先画好的图片 GVMRBitmap.ColorKey := clWhite; GVMRBitmap.Source := GVMRBitmap.Canvas.ClipRect; GVMRBitmap.DrawTo(10,10,10,10, 1.0) ;//x,y,w,h :需要绘制的区域,即在VideoWindow上的目标区域 GVMRBitmap.Alpha := 1.0; finally Bitmap.Free; end; end; 这样写了一段代码但是显示不出来,不能叠加到视频上
mdejtod 2016-12-01
  • 打赏
  • 举报
回复
var GVMRBitmap : TVMRBitmap; GVMRBitmap:= TVMRBitmap.Create(VideoWindow); GVMRBitmap.Options := [vmrbSrcColorKey]; GVMRBitmap.LoadBitmap(Bitmap); //Bitmap :事先画好的图片 GVMRBitmap.ColorKey := clWhite; GVMRBitmap.Source := GVMRBitmap.Canvas.ClipRect; GVMRBitmap.DrawTo(x,y,w,h, 1.0) ;//x,y,w,h :需要绘制的区域,即在VideoWindow上的目标区域 GVMRBitmap.Alpha := 1.0;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧