如何在picturebox在画个一个矩形框,并可以移动它,类似photoshop中选择框

nansa2000 2007-04-27 04:35:26
如何在picturebox在画个一个矩形框,并可以移动它,类似photoshop中选择框,让用户保存框内截取的图片
...全文
1555 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
犀山居士 2007-05-09
  • 打赏
  • 举报
回复
把 AutoRedraw = False 改为 AutoRedraw = True,可以去掉 Private Sub Picture1_Paint()
犀山居士 2007-05-09
  • 打赏
  • 举报
回复
这是我写的代码
请新建一个工程,放一个图片框控件在窗体上,不改控件名称,放入以下代码

Option Explicit

'矩形结构
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

'操作类型
Enum OpType
None = 0
Draw
Drag
End Enum


Dim rc As RECT '所画矩形
Dim ot As OpType '操作类型
Dim m_X As Long '当拖动矩形时,鼠标位置的 X 坐标
Dim m_Y As Long '当拖动矩形时,鼠标位置的 Y 坐标

Private Sub Form_Load()
ot = None
With Picture1
.ScaleMode = vbPixels
.AutoRedraw = False
.Appearance = 0
End With
End Sub

Private Sub Form_Resize()
Picture1.Move ScaleX(8, vbPixels, ScaleMode), ScaleY(8, vbPixels, ScaleMode), _
ScaleWidth - ScaleX(16, vbPixels, ScaleMode), _
ScaleHeight - ScaleY(16, vbPixels, ScaleMode)
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If vbLeftButton = (Button And vbLeftButton) Then
Select Case ot
Case OpType.None
With rc
If X > .Left And X < .Right And Y > .Top And Y < .Bottom Then
'如果已经画好了矩形,如果点击矩形范围内任意位置,则视为拖动矩形
m_X = X
m_Y = Y
ot = Drag
Else
'反之则视为重画矩形
Call DrawRect
.Left = X
.Right = X
.Top = Y
.Bottom = Y
ot = Draw
End If
End With
Case OpType.Draw
Case OpType.Drag
End Select
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If vbLeftButton = (Button And vbLeftButton) Then
With rc
Select Case ot
Case OpType.None
Case OpType.Draw
'画矩形时,先画一次清除上次画的矩形
Call DrawRect
'矩形的其中一个角不变
.Right = X
.Bottom = Y
'再画新的矩形,达到移动矩形的目的
Call DrawRect
Case OpType.Drag
'画矩形时,先画一次清除上次画的矩形
Call DrawRect
'移动整个矩形
.Left = .Left - m_X + X
.Top = .Top - m_Y + Y
.Right = .Right - m_X + X
.Bottom = .Bottom - m_Y + Y
m_X = X
m_Y = Y
'再画新的矩形,达到移动矩形的目的
Call DrawRect
End Select
End With
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If vbLeftButton = (Button And vbLeftButton) Then
Select Case ot
Case OpType.None
Case OpType.Draw
'为了下次拖动,将矩形调整好,左边比右边的坐标小,上边比下边坐标小
Dim tmp As Long
With rc
If .Right < .Left Then
tmp = .Right
.Right = .Left
.Left = tmp
End If
If .Bottom < .Top Then
tmp = .Bottom
.Bottom = .Top
.Top = tmp
End If
End With
Case OpType.Drag
End Select
ot = None
End If
End Sub

'画矩形
Private Sub DrawRect()
With rc
If .Right = .Left Or .Bottom = .Top Then Exit Sub
Dim drMode As Integer
drMode = Picture1.DrawMode
Picture1.DrawMode = vbNotXorPen
Picture1.Line (.Left, .Top)-(.Right, .Bottom), vbRed, B
Picture1.DrawMode = drMode
End With
End Sub

'控件重画时,要重画矩形
Private Sub Picture1_Paint()
Picture1.Cls
Call DrawRect
End Sub
犀山居士 2007-05-09
  • 打赏
  • 举报
回复
记住矩形的位置宽度和高度,画的时候,以vbXorPan方式,第一次只画一次,你用鼠标移动后,先画一次,就会清除以前画的,再画一次,就是新的
meritw 2007-05-08
  • 打赏
  • 举报
回复
mark
laviewpbt 2007-05-08
  • 打赏
  • 举报
回复
答辩后公布那个代码,大家鼓励我吧,我就是不想写论文啊!郁闷!!!!!
VBToy 2007-05-08
  • 打赏
  • 举报
回复
的确,“人一定要靠自己”。不过可以参考一下这个:http://community.csdn.net/Expert/topic/5502/5502963.xml?temp=.7847559
laviewpbt 2007-05-03
  • 打赏
  • 举报
回复
呵呵!
clear_zero 2007-05-03
  • 打赏
  • 举报
回复
我没做过,友情帮顶
IamDeane 2007-05-03
  • 打赏
  • 举报
回复
同志们拿砖头砸楼上,呵呵
laviewpbt 2007-04-27
  • 打赏
  • 举报
回复
模范PS的选取框,俺以实现,不过不想公开代码,其实很简单,不超过100行代码!呵呵
nansa2000 2007-04-27
  • 打赏
  • 举报
回复
用XOR笔画没有用过,能不能指点一下啊

移动shape控件卡的很,不流畅
VBToy 2007-04-27
  • 打赏
  • 举报
回复
用XOR笔画或直接用shape控件的矩形,至于如何截取图片,可以计算。
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制的应用,通过Matlab代码实现了控制算法的仿真验证。该方法融合强化学习的在线自适应能力与传统PID控制的稳定性优势,利用QLearning算法动态优化PID控制器的比例、积分、微分参数,以应对水下复杂流体环境、模型不确定性及外部干扰等挑战,从而提升AUV轨迹跟踪的精度、鲁棒性与动态响应性能。文系统阐述了AUV的六自由度非线性动力学建模过程、QLearning算法的状态空间与动作空间设计、奖励函数构造及训练机制,并详细说明了PID参数自整定的闭环控制架构。仿真结果表明,相较于传统固定参数PID控制器,该智能控制策略在多种工况下均展现出更优的控制效果,有效抑制了超调,加快了响应速度,并增强了抗干扰能力。; 适合人群:具备自动控制理论、强化学习基础及Matlab/Simulink仿真能力,从事水下机器人、智能控制、海洋工程、自动化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于AUV、UUV等无人水下平台的高精度自主导航与运动控制;②为解决非线性、强耦合、时变系统的控制器参数自适应整定问题提供智能化解决方案;③作为强化学习与经典控制理论深度融合的技术范例,推动智能控制算法在海洋装备的工程化应用。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点剖析QLearning的状态-动作-奖励机制设计、PID参数更新逻辑及仿真对比实验结果,有条件者可在更复杂的动力学模型或实际硬件平台上进一步验证与优化算法性能。

807

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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