首页 > 编程语言 >【C#】Halcon显示图像(读文件路径、缓存、创建空白图像)

【C#】Halcon显示图像(读文件路径、缓存、创建空白图像)

时间:2024-09-27 09:01:04浏览次数:9  
标签:HOperatorSet C# win Image Halcon Width 图像 Height out

public HTuple hv_ExpDefaultWinHandle;

  //输入图像宽高
  Int64 Input_Image_Width = 0, Input_Image_Height = 0;

  /// <summary>
  /// 加载图像
  /// </summary>
  ///  <param name="type">类型,0:内存地址; 1:文件路径;2:图像; 3:空白图像</param>
  /// <param name="ptr">内存地址</param>
  /// <param name="filePath">文件路径</param>
  /// <exception cref="Exception"></exception>
  private void action(int type, IntPtr ptr, String filePath = "")
  {
      try
      {
          HObject ho_Image;
          HOperatorSet.GenEmptyObj(out ho_Image);
          HTuple win_Width, win_Height, win_Col, win_Row;
          HOperatorSet.GetWindowExtents(hv_ExpDefaultWinHandle, out win_Row, out win_Col, out win_Width, out win_Height);//获取窗体大小规格

          //设置画图颜色
          HOperatorSet.SetDraw(hv_ExpDefaultWinHandle, "margin");
          HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "red");
          //设置窗体显示对象个数
          HOperatorSet.SetWindowParam(hv_ExpDefaultWinHandle, "graphics_stack_max_element_num", 500000);

          if (type == 0 || type == 1)
          {
              if (!string.IsNullOrEmpty(filePath))
              {
                  //文件路径加载图像
                  HOperatorSet.ReadImage(out ho_Image, filePath);
              }
              else if (ptr != IntPtr.Zero)
              {
                  //内存加载图像
                  HOperatorSet.GenImage1(out ho_Image, "byte", Input_Image_Width, Input_Image_Height, ptr);
              }
          }
          else if (type == 3)
          {
              //创建黑色空白图像
              HOperatorSet.GenImageConst(out ho_Image, "byte", Input_Image_Width, Input_Image_Height);
          }

          //LogHelperUtility.Info("结束畸变:" + DateTime.Now.ToLongTimeString());
          HTuple Width, Height;
          HOperatorSet.GetImageSize(ho_Image, out Width, out Height);  // 获取图像宽高

          HTuple ScaleWidth = Width / (win_Width * 1.0);
          HTuple ScaleHeight = Height / (win_Height * 1.0);

          HTuple row1, column1, row2, column2;
          row1 = 0;
          column1 = -(1.0) * ((win_Width * ScaleHeight) - Width) / 2;
          row2 = row1 + win_Height * ScaleHeight;
          column2 = column1 + win_Width * ScaleHeight;
          HOperatorSet.SetPart(hv_ExpDefaultWinHandle, row1, column1, row2, column2);
          // 关键
          HOperatorSet.ClearWindow(hv_ExpDefaultWinHandle);
          HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
      }
      catch (Exception ex)
      {
          throw new Exception("[action]图像加载失败,ex:" + ex.Message);
      }
  }

标签:HOperatorSet,C#,win,Image,Halcon,Width,图像,Height,out
From: https://www.cnblogs.com/qiutian-hao/p/18434963

相关文章

  • hibernate 自定义表名与列名 - 增删改查分页 - 兼容Mysql和Oracle
    1.新增service,先组装SQLimportlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.data.domain.Page;importorg.springframework.stereo......
  • P10681 COTS/CETS 2024 奇偶矩阵 Tablica
    P10681COTS/CETS2024奇偶矩阵Tablica来自qnqfff大佬的梦幻dp。约定二元组\((n,m)\)表示一个\(n\)行\(m\)列的矩形。不添加说明的子问题,限制与题面一致。思路先考虑放最后一行,发现你填的位置经过变换后可以得到其他的结果,也就是说只要乘上变换的方案数就可以任......
  • semi-sync原主库加入集群阻塞问题分析
    问题现象客户在一个一主两从的半同步复制环境下做了手工切换,然后尝试把原主库加入集群中,结果发现新集群中的数据一直无法同步到slave(原主库)中来,查看slave(原主库)同步状态,IO线程和SQL线程都是YES状态,但是Seconds_Behind_Master大于0.查看showprocesslist状态,发现SQL线程一......
  • 495. 响应式潮流小游戏网页 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • 运用canvas绘制出好玩的粒子效果
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>Document</title>  ......
  • 广州C++信奥老师解1913:【00NOIP普及组】单词接龙
    ​ 【题目描述】 【输出】 样例连成的“龙”为atoucheatactactouchoose#include<bits/stdc++.h>usingnamespacestd;intv[21],ans=0,n;stringa[21];intgetPos(strings1,strings2)//beast和astonish例ast则返回位置2,但实际把后面onish接上去{for......
  • PCB是层数越多,性能越高吗?
    PCB,即印刷电路板,是电子设备中不可或缺的微型支撑平台,它为集成电路提供了稳固的安装基础。随着技术的进步,多层PCB板的设计使得在有限的空间内集成更多复杂的电路成为可能,同时也在一定程度上降低了电路布局的复杂性。然而,有一种普遍的观点认为PCB的层数越多,其性能就越优越,这种......
  • CF套题4翻译(uoj转载)
    \(A\)题:CF1098A给你一棵树,树根为\(1\)号点。每个点\(i\)有一个非负整数权值\(a_i\),记点\(i\)到根的路径上经过的所有点(包括根和自身)的权值总和为\(s_i\)。现在擦去所有深度为偶数的点的\(s_i\),求\(\suma_i\)最小可能是多少,如果无解,输出\(-1\)。被擦去的\(s_i\)在输入文件中被......
  • Anaconda 安装与使用教程
    1.介绍Anaconda是一个用于科学计算的Python和R的发行版,包含了众多流行的科学、数学、工程和数据分析的Python包。它不仅是一个包管理器,还是一个环境管理工具,可以帮助用户创建隔离的环境,安装特定版本的软件包及其依赖项。2.安装Anaconda2.1下载-访问[Anaconda......
  • Open3D 点云分割之最小图割算法(C++)
    文章目录一、原理概述1.1基本原理1.2最小割算法二、实现代码三、实现代码参考资料一、原理概述1.1基本原理(1)首先用一个无向图G=<V,E>来表示要分割的点云,V和E分别是顶点和边的集合(构建无向图),其中每条边均有着相应的权重。不同于普通的图结构,GraphCuts图......