* 创建二维码模型
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
* 寻找二维码并解码
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
HWindowControlWPF是Halcon提供的WPF控件,用于显示Halcon图像,而HSmartWindowControlWPF是Halcon提供的高级WPF控件,除了能显示Halcon图像外,还可以进行交互式图像处理和测量等操作。HSmartWindowControlWPF还可以添加自定义的工具栏和菜单,使用户能够更方便地进行图像处理。因此,HSmartWindowControlWPF相比HWindowControlWPF具有更多的功能和灵活性。
<halcon:HWindowControlWPF x:Name="HW" />
<halcon:HSmartWindowControlWPF x:Name="HS" Grid.Column="1" />
List<HDrawingObject> hDrawingObjects = new List<HDrawingObject>();
HDrawingObject.CreateDrawingObject
HW.HalconWindow.AttachDrawingObjectToWindow(hdrawObj);
HS.HalconWindow.DispObj(image);
HS.SetFullImagePart(image);
HS.HalconWindow.AttachDrawingObjectToWindow(rect);
internal class SmartWindowControl : HSmartWindowControl
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
MouseWheel += SmartWindowControl_MouseWheel;
}
private void SmartWindowControl_MouseWheel(object sender, MouseEventArgs e)
{
MouseEventArgs newe = new MouseEventArgs(e.Button, e.Clicks, e.X - Location.X, e.Y - Location.Y, e.Delta);
HSmartWindowControl_MouseWheel(sender, newe);
}
}
HDrawingObject drawingObject = new HDrawingObject();
drawingObject = HDrawingObject.CreateDrawingObject(RECTANGLE1,height, width ,height,width);
hswControl.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
roi = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, r, c, Radius);
_hwind.AttachDrawingObjectToWindow(roi);
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && rect_roi.IsChecked == true)
{
_endPoint = e.GetPosition(Canvas);
_canvasRect.Height = Math.Abs(_endPoint.Y - _startPoint.Y);
_canvasRect.Width = Math.Abs(_endPoint.X - _startPoint.X);
// 左上往右下拖动
if (_endPoint.X > _startPoint.X && _endPoint.Y > _startPoint.Y)
{
Canvas.SetLeft(_canvasRect, _startPoint.X);
Canvas.SetTop(_canvasRect, _startPoint.Y);
//坐标转换,Canvas => HWindow
ConvertPoint(_startPoint.X, _startPoint.Y, _k, _tx, _ty, out double sx, out double sy);
ConvertPoint(_endPoint.X, _endPoint.Y, _k, _tx, _ty, out double ex, out double ey);
_r1 = sy;
_c1 = sx;
_r2 = ey;
_c2 = ex;
}
// 右下往左上拖动
if (_endPoint.X < _startPoint.X && _endPoint.Y < _startPoint.Y)
{
Canvas.SetLeft(_canvasRect, _endPoint.X);
Canvas.SetTop(_canvasRect, _endPoint.Y);
}
}