本人 haungbing114 发表于 halcon 学习网Halcon 的控件滑轮事件:放缩代码:// 设定图像的窗口显示部分 private double zoom_beginX, zoom_beginY, zoom_width, zoom_heigth; // 猎取图像的当前显示部分 private double current_beginX, current_beginY, current_width, current_heigth; //放大缩小图像 public void pictureZoom(int delta, double centerX, double centerY) { // hv_WinHandleShow.HalconWindow.ClearWindow(); //放大图片:delta〈0 if (delta 〈 0) { zoom_width = current_width * 0。8d; zoom_heigth = current_heigth * 0.8d; zoom_beginX = 0; zoom_beginY = 0; if (centerX - zoom_width / 2d 〉 0) zoom_beginX = centerX — zoom_width / 2d; if (centerY - zoom_heigth / 2d 〉 0) zoom_beginY = centerY — zoom_heigth / 2d; if (hv_width[0]。I 〈 centerX + zoom_width / 2d) zoom_beginX = (double)hv_width[0].I — zoom_width; if (hv_height[0]。I < centerY + zoom_heigth / 2d) zoom_beginY = (double)hv_height[0].I — zoom_heigth; //hv_WinHandleShow.ImagePart = new System.Drawing.Rectangle((int)zoom_beginX, (int)zoom_beginY, (int)zoom_width, (int)zoom_heigth); } else { zoom_width = current_width / 0.8d; zoom_heigth = current_heigth / 0。8d; zoom_beginX = 0; zoom_beginY = 0; if (centerX - zoom_width / 2d > 0) zoom_beginX = centerX — zoom_width / 2d; if (centerY - zoom_heigth / 2d 〉 0) zoom_beginY = centerY - zoom_heigth / 2d; if (hv_width[0].I 〈 centerX + zoom_width / 2d) zoom_beginX = (double)hv_width[0]。I - zoom_width; if (hv_height[0]。I < centerY + zoom_heigth / 2d) zoom_beginY = (double)hv_height[0].I - zoom_heigth; } hv_WinHandleShow.ImagePart = new System。Drawing.Rectangle((int)zoom_beginX, (int)zoom_beginY, (int)zoom_width, (int)zoom_heigth); //重新显示图片 pictureUpdate(); }原理讲解:一定注意 size 属性和 imagePart 的区分: size:只是代表控件的大小,不影响图片显示; imagePart:代表图片的显示在控件的部分,imagPart 就是一可移动长方形的框,imagPart 的值是指图片上的坐标值,imagePart 相当于在图片上选择一部分显示在 halcon 控件中,如图, imagPart 选择的范围为图片中的红色框部分,halcon 控件中就显示这一部分,代码中 e。X,e。Y 代表的是图片上的坐标,所以放缩实际就是在改变图片中的显示范围-imagePart 的大小和范围因为 halcon 的显示控件 size 保持一定,所以你选择的 ImagePart 的范围越小,显示就越大,所以放大,平移就是把 ImagePart 上下左右移动,不改变大小