C# 曲线进行局部放大的问题

aaa2742 2015-09-16 11:29:57
使用GDI+绘制了曲线,想通过鼠标在图上画个虚线框然后以该部分为中心进行放大,平时很常见的功能。
先别说放大,就说实现矩形框的绘制实现。这个在C++里实现过,通过在MouseMove里获取ClientDC,好像ClientDC是个临时绘图设备句柄,然后画矩形框,擦出上一次绘制的矩形框(InvalidateRect),UpdateWindow等实现了该功能。

现在在C# 中也想实现该功能,但是有问题:
1、如果按照上面的思路整,回发现在绘制矩形框的时候里面的曲线也会跟着重绘,另外在绘制矩形框的过程中,由小到大时能清理上次矩形的痕迹,但由大到小时便由很多上次的痕迹。这相当于采用的局部擦除、重绘的方法,但下面的曲线也会跟着重绘。
2、如果采用的是该控件的refresh,则绘制矩形过程中由大到小时的痕迹没有了,但肯定的下面的曲线会重绘,如下图所示。

如果实现图片中的功能,让下面的曲线在矩形框绘制时不进行重绘就可以了,怎样实现该效果?
...全文
539 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaa2742 2015-09-17
  • 打赏
  • 举报
回复
问题已解决。
tcmakebest 2015-09-16
  • 打赏
  • 举报
回复
GDI绘图最好不要直接画到控件上,而是画到一张图片上,用代码控制什么时候重新画,界面上是显示这张图片.
  • 打赏
  • 举报
回复
首先我并不确定你说的“c++里实现过”是否能够跟一个复杂的真正的应用绘图系统在一起使用(如果可用,为什么还要折腾什么c#呢?),至少在 .net 中,一般来说,不需要搞这个低级的编程。用鼠标拖拉一个矩形框,那么写2、3行代码去拖拉一个 wpf Rectangle控件或者 Border 控件就行了。顶多写3行代码而已,而且在鼠标拖拉过程中,还无什么“擦除、重绘”方面的毛病。 低级的东西看上去是“万能的”,其实对于99%的开发人员来说,其开发效率低得根本就只能在家里“玩儿”而已而几乎无法解决问题。
  • 打赏
  • 举报
回复
而几乎无法解决问题 --> 而几乎无法解决当你的成百上千个不同的控件的层叠加在一起的问题
Poopaye 2015-09-16
  • 打赏
  • 举报
回复
你别在一个控件上画啊,再叠加一层控件上画不就好了
bdmh 2015-09-16
  • 打赏
  • 举报
回复
曲线有间距和线宽,还有起始索引,拟定一个scale变量,开始是1,放大就是增大scale,缩小就减小scale,画的时候,线宽和间距都和scale做个乘法
aaa2742 2015-09-16
  • 打赏
  • 举报
回复
引用 5 楼 tcmakebest 的回复:
GDI绘图最好不要直接画到控件上,而是画到一张图片上,用代码控制什么时候重新画,界面上是显示这张图片.
你说的时双缓冲,在绘制曲线时已经用上了。
引用 11 楼 diaodiaop 的回复:
够灵活 不知道LZ需要的是有多"灵活"的控件? 毫秒级实时上百万个点 可拖动计算放大缩小 行不行呢?
不要乱扯,如有高招请指教。
Poopaye 2015-09-16
  • 打赏
  • 举报
回复
引用 10 楼 aaa2742 的回复:
[quote=引用 2 楼 shingoscar 的回复:] 你别在一个控件上画啊,再叠加一层控件上画不就好了
虽然也不失为一个办法,但用的着这么复杂么,只是实现一个较为使用常见的功能。C++上的这一套我已经实现了,想在C#平台上实现。难不成我在GDI+里在导入GDI的库吧,这也太扯了。[/quote] c#的System.Drawing用的就是gdi+ 你说你在c++已经实现了,那在c#里也是一样的
by_封爱 版主 2015-09-16
  • 打赏
  • 举报
回复
够灵活 不知道LZ需要的是有多"灵活"的控件? 毫秒级实时上百万个点 可拖动计算放大缩小 行不行呢?
aaa2742 2015-09-16
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
你别在一个控件上画啊,再叠加一层控件上画不就好了
虽然也不失为一个办法,但用的着这么复杂么,只是实现一个较为使用常见的功能。C++上的这一套我已经实现了,想在C#平台上实现。难不成我在GDI+里在导入GDI的库吧,这也太扯了。
aaa2742 2015-09-16
  • 打赏
  • 举报
回复
引用 6 楼 diaodiaop 的回复:
看到这样的帖子 我也就呵呵了 难道你们都不懂 "前人栽树后人乘凉"这个道理吗? 你们这样做是图什么呢? 为了解锁新姿势吗? 人家做过的不管是企业级还是工业级 完全可以满足你们任何愿望.. 但是你们非得用你们所谓的"GDI+"自己写,你觉得你这2年的GDI+的经验是不是要高于人家做10几年的控件还厉害? 或者为了给别人演示"你看这是我手写的,可不是用的什么控件噢!"之后得到短暂的高潮?
图想修改的时候能够灵活些,如果只是想显示之类的随便找一个控件就行了,但控件不是万能的。 控件有许多时商业的,是有版权的。
aaa2742 2015-09-16
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
曲线有间距和线宽,还有起始索引,拟定一个scale变量,开始是1,放大就是增大scale,缩小就减小scale,画的时候,线宽和间距都和scale做个乘法
缩放这个知道,主要问题在画矩形框上,也是为了人机界面交互友好。
by_封爱 版主 2015-09-16
  • 打赏
  • 举报
回复
c#实现这个功能很简单... 设置一个属性XXXXXX.OOOOOOO=true;就行了
by_封爱 版主 2015-09-16
  • 打赏
  • 举报
回复
看到这样的帖子 我也就呵呵了 难道你们都不懂 "前人栽树后人乘凉"这个道理吗? 你们这样做是图什么呢? 为了解锁新姿势吗? 人家做过的不管是企业级还是工业级 完全可以满足你们任何愿望.. 但是你们非得用你们所谓的"GDI+"自己写,你觉得你这2年的GDI+的经验是不是要高于人家做10几年的控件还厉害? 或者为了给别人演示"你看这是我手写的,可不是用的什么控件噢!"之后得到短暂的高潮?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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