使用GDI+实现根据鼠标拖动轨迹绘制曲线

时间:2022-08-29 21:28:03
就是想要实现在一个Picture控件中按下鼠标左键然后移动,可以根据鼠标的移动轨迹绘图。

之前有试过DrawCurve方法,但是它好像是根据几个关键点画图,鼠标拖动获得的应该是一系列连续的点吧,这个需要怎样实现呢?

求各位大神帮忙啦~

8 个解决方案

#1


GDI+有个DrawLines函数,将一系统的点用直线连接绘制起来

#2


引用 1 楼 cvbtvbwu 的回复:
GDI+有个DrawLines函数,将一系统的点用直线连接绘制起来


将数组保存的点用直线连接绘制起来

#3


我觉得可以这样来实现:设定一个定时器,每隔一定的时间间隔触发一次(可以自己设定,比如100ms),触发时获得鼠标光标的位置坐标,然后将这个坐标保存到一个数组里面,完了之后,每次取出数组里面相邻的两个点,画直线就行了。理论上而言,只要你的这个时间间隔足够小,画出来的应该是平滑的曲线。

#4


不用GDI+都可以画曲线,何况是GDI+
MouseMove里画

#5


好的~谢谢大家,我去试一试~

#6


鼠标移动事件中,获得的点是系列离散的点,鼠标移动越快,离散程度也大,使用LineTo方法即可获得基本正确的鼠标规矩

#7


其实你只要把点和点的距离弄的很近了,就基本是已经模仿鼠标轨迹了

#8


谢谢大家的回答,最后是使用GDI+自带的DrawPath函数完成的,在MouseMove里面获取鼠标移动的点并存入数组,然后调用DrawPath,谢谢大家啦!

#1


GDI+有个DrawLines函数,将一系统的点用直线连接绘制起来

#2


引用 1 楼 cvbtvbwu 的回复:
GDI+有个DrawLines函数,将一系统的点用直线连接绘制起来


将数组保存的点用直线连接绘制起来

#3


我觉得可以这样来实现:设定一个定时器,每隔一定的时间间隔触发一次(可以自己设定,比如100ms),触发时获得鼠标光标的位置坐标,然后将这个坐标保存到一个数组里面,完了之后,每次取出数组里面相邻的两个点,画直线就行了。理论上而言,只要你的这个时间间隔足够小,画出来的应该是平滑的曲线。

#4


不用GDI+都可以画曲线,何况是GDI+
MouseMove里画

#5


好的~谢谢大家,我去试一试~

#6


鼠标移动事件中,获得的点是系列离散的点,鼠标移动越快,离散程度也大,使用LineTo方法即可获得基本正确的鼠标规矩

#7


其实你只要把点和点的距离弄的很近了,就基本是已经模仿鼠标轨迹了

#8


谢谢大家的回答,最后是使用GDI+自带的DrawPath函数完成的,在MouseMove里面获取鼠标移动的点并存入数组,然后调用DrawPath,谢谢大家啦!