鼠标交互:
***画刷橡皮例子:
dev_update_off()
**创建一个灰度值不变的图像
gen_image_const(Image, 'byte', 512, 512)
**绘制region到image内
paint_region(Image,Image, ImageResult, 255, 'fill')
**获取窗口句柄
dev_get_window (WindowHandle)
button:=0
**创建空的物体元组
gen_empty_obj(re)
**当右键未点击
while(button#4)
**指定HDevelop中的错误处理方式
dev_set_check ('~give_error')
**无需等待直接监听鼠标并且都是一次触发一次返回
get_mposition(WindowHandle, Row, Column, button)
**可以检查算子调用返回的结果状态
dev_set_check ('give_error')
if(button==1)
gen_circle(Circle, Row, Column, 5)
union2(re,Circle,re)
endif
if(button==2)
gen_circle(Circle, Row, Column, 5)
difference(re,Circle,re)
endif
dev_display(Image)
dev_display(re)
endwhile
***鼠标选取例子:
**创建常值灰度的图像
gen_image_const(Image, 'byte', 512, 512)
gen_circle (roi1, 302.007, 112.481, 56.9413)
gen_rectangle1 (roi2, 162.06, 325.473, 291.767, 433.335)
dev_get_window (WindowHandle)
Null:=[]
button:=0
IsInside1:=0
IsInside2:=0
**鼠标右键未点击
while(button#4)
**防止鼠标离开设定窗口抛出异常
dev_set_check ('~give_error')
**获取鼠标位置
get_mposition(WindowHandle, Row, Column, button)
**测试给定点是否在区域内
test_region_point (roi1, Row, Column, IsInside1)
test_region_point (roi2, Row, Column, IsInside2)
**配合异常检测
dev_set_check ('give_error')
if(IsInside1#Null)
if(IsInside1)
dev_set_color('green')
dev_display(roi1)
else
dev_set_color('red')
dev_display(roi1)
endif
if(IsInside2)
dev_set_color('green')
dev_display(roi2)
else
dev_set_color('red')
dev_display(roi2)
endif
endif
endwhile
***鼠标选取xld例子:
read_image (Image, 'E:/桌面/第七讲附件/2.bmp')
rgb1_to_gray(Image, GrayImage)
dev_set_line_width(5)
dev_update_off()
**提取亚像素轮廓
edges_sub_pix(GrayImage, Edges, 'canny', 1, 20, 40)
**将XLD轮廓分割成线段和圆弧或椭圆弧
segment_contours_xld(Edges, ContoursSplit, 'lines_circles', 5, 4, 2)
dev_display(GrayImage)
dev_get_window (WindowHandle)
button:=0
selindex:=[]
while(button!=4)
dev_set_check ('~give_error')
get_mposition(WindowHandle, Row, Column, button)
dev_set_check ('give_error')
if(Row#[])
selindex:=[]
**生成一系列描述一个圆的点
gen_circle_contour_xld(ContCircle, Row, Column, 5, 0, 6.28318, 'positive', 1)
gen_empty_obj(prefind)
count_obj(ContoursSplit,Number)
for i:= 1 to Number by 1
select_obj(ContoursSplit,ObjectSelected, i)
**取出两个区域中重叠的部分
intersection_contours_xld(ContCircle,ObjectSelected,'all', Row1, Column1, IsOverlapping)
if(|Row1|>0)
**两个区域组成区域集
concat_obj(prefind,ObjectSelected,prefind)
selindex:=[selindex,i]
endif
endfor
if(button==1)
dev_display(GrayImage)
dev_display(prefind)
button:=4
count_obj(ContoursSplit,Number1)
allindex:=[1:Number1]
for j:= 0 to |selindex|-1 by 1
**数据移除
tuple_remove(allindex,selindex[j]-1,allindex) endfor
select_obj(ContoursSplit,finnal,allindex)
endif
dev_display(GrayImage)
dev_display(prefind)
endif
*stop()
endwhile