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

zhouyj-csdn 2017-10-21 03:14:25
我是用Picture控件在实时显示相机拍摄的视频,然后在控件上需要绘制坐标轴,通过Edit控件输入XY轴坐标来显示,然后在OnPaint()中写绘制坐标轴的代码,但是不连接相机还能显示,一旦连接相机后就完全被覆盖在视频下面了,我是通过CClientDC dc(this);MoveTo();LineTo()来画的,这种问题该怎么解决呢?
...全文
560 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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里画线条,肯定会被相机采集的图片(每次刷新图片)所覆盖的。你应该在相机采集代码那里画线。

15,980

社区成员

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

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