MFC使用Picture控件绘制坐标轴总是被覆盖

zhouyj-csdn 2017-10-21 03:14:25
我是用Picture控件在实时显示相机拍摄的视频,然后在控件上需要绘制坐标轴,通过Edit控件输入XY轴坐标来显示,然后在OnPaint()中写绘制坐标轴的代码,但是不连接相机还能显示,一旦连接相机后就完全被覆盖在视频下面了,我是通过CClientDC dc(this);MoveTo();LineTo()来画的,这种问题该怎么解决呢?
...全文
547 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 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方法就不会被覆盖,但又没找到办法清除上一次画的
red-fly 2017-10-23
  • 打赏
  • 举报
回复
那就简单了,改变你需要画的内容不就得了? 比如在一个按钮里修改你的全局变量: 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的值就行了
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 8 楼 jszj 的回复:
DrawLine个方法,是每次显示图像之前都要调用,还是你只用调用一次画好之后,图像上就会自动叠加你的坐标? 应该会有清除的,否则只允许往上面添加东西而不允许撤下来,那肯定是不合逻辑的 透明应该是一个办法,但不推荐用它,即使它可以达到效果
DrawLine()在每次需要显示的时候会一直调用的,这两种有什么区别吗
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 6 楼 zhangli00 的回复:
想要在别人的控件DC上作图并显示,要看看控件有没有提供相关接口,如果没有,你又非常想实现,我建议你可以考虑将原控件DC截图,绘制到另外的如picture control之类的控件上,绘制的过程中,加入你的坐标轴,这样来实现
你说的截图方法,我不是很明白该怎么做,我现在的情况是调用的SDK开发包里的覆盖位图,DrawLine方法可以在视频上面绘图了,但没法清除掉上一次绘制的图形,用Invalidate(),UpdateWindow()也只会导致画面产生抖动的现象,这种情况可以怎么处理呢
red-fly 2017-10-23
  • 打赏
  • 举报
回复
DrawLine个方法,是每次显示图像之前都要调用,还是你只用调用一次画好之后,图像上就会自动叠加你的坐标? 应该会有清除的,否则只允许往上面添加东西而不允许撤下来,那肯定是不合逻辑的 透明应该是一个办法,但不推荐用它,即使它可以达到效果
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 3 楼 jszj 的回复:
那看下相关的SDK是否有提供相关的接口或者方案 这种功能看起来很简单,但想做好还是很不容易的
我看了开发包,找到有DrawLine方法,是通过用位图来实现的,我直接调用也可以在实时显示界面上绘出来,但第二次设置参数显示时,没办法删掉前一次绘的图,他们 会一直在上面,SDK中也没找到有清除相关的方法,用透明色来填充可以实现吗
csulizhang 2017-10-23
  • 打赏
  • 举报
回复
想要在别人的控件DC上作图并显示,要看看控件有没有提供相关接口,如果没有,你又非常想实现,我建议你可以考虑将原控件DC截图,绘制到另外的如picture control之类的控件上,绘制的过程中,加入你的坐标轴,这样来实现
red-fly 2017-10-23
  • 打赏
  • 举报
回复
在调用displaypix() 时使用你最新的值不就行了?
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 15 楼 jszj 的回复:
displaypix()的参数x、y是哪里传进来的?
是我从另一个函数中传参传过来的
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
引用 15 楼 jszj 的回复:
displaypix()的参数x、y是哪里传进来的?
X,Y是获取的参数界面中X轴Y轴编辑框里的值
red-fly 2017-10-23
  • 打赏
  • 举报
回复
displaypix()的参数x、y是哪里传进来的?
zhouyj-csdn 2017-10-23
  • 打赏
  • 举报
回复
red-fly 2017-10-23
  • 打赏
  • 举报
回复
引用 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方法就不会被覆盖,但又没找到办法清除上一次画的[/quote] 改变的是你DrawLine相关接口的画图参数,我上面说的仅是举个例子给你看,把你调用DrawLine的函数及和DrawLine相关的代码贴几行上来看看
red-fly 2017-10-21
  • 打赏
  • 举报
回复
我觉得也可以有另外一种方法,不过也同样需要SDK提供一些支持才行。 SDK的画面显示在同样大小的一个隐藏起来的控件上,固定时间或者每当图片有更新时,就把这个隐藏控件上的内容截下来,这样坐标线就是固定的了不会缩放,就在截下来的画面上画好坐标线,然后再画到显示的这个控件上
red-fly 2017-10-21
  • 打赏
  • 举报
回复
通常是在一个新的图片画上去之前就把对应的坐标线画到图片上,然后把图片显示到控件上时自然就有了坐标线,但是要注意图片放大或者缩小对坐标线条的影响
red-fly 2017-10-21
  • 打赏
  • 举报
回复
那看下相关的SDK是否有提供相关的接口或者方案 这种功能看起来很简单,但想做好还是很不容易的
zhouyj-csdn 2017-10-21
  • 打赏
  • 举报
回复
我是直接引入相机的SDK开发包,去采集图像的地方划线,好像有点麻烦呢,有更快捷的方法吗
kuangbao9 2017-10-21
  • 打赏
  • 举报
回复
你在OnPaint里画线条,肯定会被相机采集的图片(每次刷新图片)所覆盖的。你应该在相机采集代码那里画线。
目录第1篇 开发基础篇 第1章 VisualC++6.0开发环境 1.1 VisualC++6.0概述 1.2 认识VisualC++集成开发环境 1.3 IDE菜单栏介绍 1.4 工具栏 1.5 输出窗口 1.6 资源编辑器 1.7 VisualC++学习常见问题 1.8 VisualC++学习方法简介 小结 第2章 利用集成开发环境生成程序 2.1 生成项目(project) 2.2 添加和编辑源文件 2.3 建立程序 2.4 运行程序 2.5 调试程序 2,6VisualC+4.生成的项目文件 2.7 编写控制台应用程序 小结 第3章 Windows程序运行原理 3.1 图形界面操作系统的王者——Windows 3.2 什么是多任务操作系统 3.3 Windows应用程序的组成 3.4 建立API的概念 3.4.1 API的发展 3.4.2 标准Win32API函数分类 3.5 一个用API编写的Windows程序 3.6 VisualC++应用程序开发框架:MFC 3.6.1 从API到MFC 3.6.2 MFC是一个编程框架 小结 第4章 开始使用MFC类库 4.1 MFC的起源和发展 4.2 MFC整体类库结构 4.3 常用MFC类简介 4.3.1 应用程序结构类 4.3.2 调试和异常类 4.3.3 文件服务类 4.3.4 图形处理类 4.3 ,5数据库类 4.3.6 Internet支持类 4.4 一个简单的MFC程序 4.5 文档/视图结构 4.5.1 文档类 4.5.2 视图类 4.5.3 使用文档/视图结构的好处 4.5.4 单文档(SDI)与多文档(MDI)应用程序 4.6 窗口类及其控件栏 4.6.1 子窗口类 4.6.2 主窗口类 4.6.3 工具栏 4.6.4 状态栏 4.7 MFC创建的完整应用程序实例 小结 第5章 菜单与加速键 5.1 消息与事件 5.1.1 事件驱动机制 5.1.2 消息和消息映射 5.1.3 消息处理过程 5.2 菜单和加速键的创建 5.2.1 菜单的创建 5.2.2 加速键的创建 5.3 添加菜单所需的处理函数 5.3.1 添加普通菜单的处理函数 5.3.2 添加弹出式菜单的处理函数 5.4 加载加速键 小结 第6章 AppWizand和ClassWizard 6.1 一个简单应用程序的创建 6.1.1 MFCAppWizard 6.1.2 ClassWizard 6.1.3 程序实例 6.2 程序调试 6.2.1 创建调试实例程序 6.2.2 调试器 小结 第7章 在WindOWS中绘制图像 7.1 绘图的基础知识 7.1.1 映射模式 7.1.2 设备上下文 7.2 图形设备接口(GDI) 7.2.1 设备环境类(CDC) 7.2.2 GDI对象 7.3 简单图形的绘制 7.3.1 屏幕绘图的主要函数 7.3.2 图形绘制基本原则 7.3.3 画笔 7.3.4 画刷 小结 第2篇 关键控件篇(MFC) 第8章 常用界面控件 8.1 静态文本(staticText)控件 8.1.1 传统控件通知消息 8.1.2 静态控件使用 8.1.3 CStatic类的主要成员函数 8.2 文本编辑(EditBox)控件 8.2.1 文本编辑控件使用 8.2.2 CEdit类的主要成员函数 8.3 滚动条(ScroUBar)控件 8.3.1 滚动条控件使用 8.3.2 CScrollBar类的主要成员函数 8.4 按钮控件 8.4.1 按钮控件使用 8.4.2 CButton类的主要成员函数 8.5 列表框(List:Box)控件 8.5.1 列表框控件使用 8.5.2 ClistBox类的主要成员函数 8.6 组合框(Combobox)控件 8.7 图片(Picture)控件 8.8 列表(ListCtrl)控件 8.8.1 Win32新型控件概述 8.8.2 列表控件使用 8.8.3 ClistCtrl类的主要成员函数 8.9 树形(TreeCtrl)控件 8.9.1 树形控件使用 8.9.2 CTreeCtrl类的主要成员函数 8.9.3 树形控件的通知消息 8.10 项卡(TabCtrl)控件 8.10.1 选项卡控件使用 8.10.2 选项卡控件通知消息 8.10.3 选项卡控件使用 8.11 用实例:进制转换计算器 8.11.1 进制转换计算器功能概述 8.11.2 实例具体实现步骤 小结 第9章 文本和字体类 9.1 基础知识介绍 9.2 CFont类 9.3 文本输出过程 9.4 字体和文本输出实例 9.5 根据数据绘制相应的柱状图 9.6 根据坐标绘制三角形 小结 第10章 对话框 10.1 对话框的创建 10.1.1 对话框的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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