编程开发 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> VC(MFC) -> MFC使用Picture控件绘制坐标轴总是被覆盖 -> 正文阅读
 

[VC(MFC)]MFC使用Picture控件绘制坐标轴总是被覆盖[第1页]

MFC 绘图
我是用Picture控件在实时显示相机拍摄的视频,然后在控件上需要绘制坐标轴,通过Edit控件输入XY轴坐标来显示,然后在OnPaint()中写绘制坐标轴的代码,但是不连接相机还能显示,一旦连接相机后就完全被覆盖在视频下面了,我是通过CClientDC dc(this);MoveTo();LineTo()来画的,这种问题该怎么解决呢?

回复:
你在OnPaint里画线条,肯定会被相机采集的图片(每次刷新图片)所覆盖的。你应该在相机采集代码那里画线。

回复:
我是直接引入相机的SDK开发包,去采集图像的地方划线,好像有点麻烦呢,有更快捷的方法吗

回复:
那看下相关的SDK是否有提供相关的接口或者方案
这种功能看起来很简单,但想做好还是很不容易的

回复:
通常是在一个新的图片画上去之前就把对应的坐标线画到图片上,然后把图片显示到控件上时自然就有了坐标线,但是要注意图片放大或者缩小对坐标线条的影响

回复:
我觉得也可以有另外一种方法,不过也同样需要SDK提供一些支持才行。
SDK的画面显示在同样大小的一个隐藏起来的控件上,固定时间或者每当图片有更新时,就把这个隐藏控件上的内容截下来,这样坐标线就是固定的了不会缩放,就在截下来的画面上画好坐标线,然后再画到显示的这个控件上

回复:
想要在别人的控件DC上作图并显示,要看看控件有没有提供相关接口,如果没有,你又非常想实现,我建议你可以考虑将原控件DC截图,绘制到另外的如picture control之类的控件上,绘制的过程中,加入你的坐标轴,这样来实现

回复:
引用 3 楼 jszj 的回复:那看下相关的SDK是否有提供相关的接口或者方案
这种功能看起来很简单,但想做好还是很不容易的
我看了开发包,找到有DrawLine方法,是通过用位图来实现的,我直接调用也可以在实时显示界面上绘出来,但第二次设置参数显示时,没办法删掉前一次绘的图,他们 会一直在上面,SDK中也没找到有清除相关的方法,用透明色来填充可以实现吗

回复:
DrawLine个方法,是每次显示图像之前都要调用,还是你只用调用一次画好之后,图像上就会自动叠加你的坐标?
应该会有清除的,否则只允许往上面添加东西而不允许撤下来,那肯定是不合逻辑的
透明应该是一个办法,但不推荐用它,即使它可以达到效果

回复:
引用 6 楼 zhangli00 的回复:想要在别人的控件DC上作图并显示,要看看控件有没有提供相关接口,如果没有,你又非常想实现,我建议你可以考虑将原控件DC截图,绘制到另外的如picture control之类的控件上,绘制的过程中,加入你的坐标轴,这样来实现
你说的截图方法,我不是很明白该怎么做,我现在的情况是调用的SDK开发包里的覆盖位图,DrawLine方法可以在视频上面绘图了,但没法清除掉上一次绘制的图形,用Invalidate(),UpdateWindow()也只会导致画面产生抖动的现象,这种情况可以怎么处理呢

回复:
引用 8 楼 jszj 的回复:DrawLine个方法,是每次显示图像之前都要调用,还是你只用调用一次画好之后,图像上就会自动叠加你的坐标?
应该会有清除的,否则只允许往上面添加东西而不允许撤下来,那肯定是不合逻辑的
透明应该是一个办法,但不推荐用它,即使它可以达到效果
DrawLine()在每次需要显示的时候会一直调用的,这两种有什么区别吗

回复:
那就简单了,改变你需要画的内容不就得了?
比如在一个按钮里修改你的全局变量:
m_x1=10;
m_y1=10;
m_x2=100;
m_y2=110;
在每次画之前,用你的变量去画:
MoveTo(m_x1, m_y1);
LineTo(m_x2, m_y2);
这样,每当需要改变画的内容时,就改变m_x1、m_y1、m_x2、m_y2的值就行了

回复:
引用 11 楼 jszj 的回复:那就简单了,改变你需要画的内容不就得了?
比如在一个按钮里修改你的全局变量:
m_x1=10;
m_y1=10;
m_x2=100;
m_y2=110;
在每次画之前,用你的变量去画:
MoveTo(m_x1, m_y1);
LineTo(m_x2, m_y2);
这样,每当需要改变画的内容时,就改变m_x1、m_y1、m_x2、m_y2的值就行了
我原先也是这么做的,取得Picture控件的DC,然后画图,也存在一个问题就是图会被视频覆盖掉,我现在取得SDK中的DrawLine方法就不会被覆盖,但又没找到办法清除上一次画的

回复:
引用 12 楼 sinat_29890433 的回复:Quote: 引用 11 楼 jszj 的回复:
那就简单了,改变你需要画的内容不就得了?
比如在一个按钮里修改你的全局变量:
m_x1=10;
m_y1=10;
m_x2=100;
m_y2=110;
在每次画之前,用你的变量去画:
MoveTo(m_x1, m_y1);
LineTo(m_x2, m_y2);
这样,每当需要改变画的内容时,就改变m_x1、m_y1、m_x2、m_y2的值就行了
我原先也是这么做的,取得Picture控件的DC,然后画图,也存在一个问题就是图会被视频覆盖掉,我现在取得SDK中的DrawLine方法就不会被覆盖,但又没找到办法清除上一次画的
改变的是你DrawLine相关接口的画图参数,我上面说的仅是举个例子给你看,把你调用DrawLine的函数及和DrawLine相关的代码贴几行上来看看

回复:


回复:
displaypix()的参数x、y是哪里传进来的?

回复:
引用 15 楼 jszj 的回复:displaypix()的参数x、y是哪里传进来的?
X,Y是获取的参数界面中X轴Y轴编辑框里的值

回复:
引用 15 楼 jszj 的回复:displaypix()的参数x、y是哪里传进来的?
是我从另一个函数中传参传过来的

回复:
在调用displaypix() 时使用你最新的值不就行了?

回复:
  VC(MFC) 最新文章
求助 MFC中 picture控件怎样动态改变其大小
vc/mfc 如何读取网页验证码?
MFC进程通信(内存共享)
基于单文档的activeX开发
ado没有注册类,无效指针
基于对话框的ocx如何调用对话框控件状态
怎样让资源浏览器的缩略图通过我的软件来显
求助MFC怎么验证HTTP、SOCK5代理IP的有效性
关于VS2015工程生成问题
刚入门学习atl的activex,怎么在网页显示控
上一篇文章      下一篇文章      查看所有文章
加:2017-10-29 22:16:36  更:2017-10-29 22:31:10 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年11日历
2018-11-13 1:58:49
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库