在此获得许多帮助,学后作一点回餽,第一次发文,如有违规请再指正。
Halcon C#开图,调整大小、转灰阶
调整大小功能没有很完整,请大神再指导修正
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using HalconDotNet;//自行添加引用
- namespace HalconCsExample
- {
- public partial class Form1 : Form
- {
- private static HWindow hwindow; //全局视窗变数
- HDevelopExport HD = new HDevelopExport();
- string ImagePath;
- public Form1()
- {
- InitializeComponent();
- hwindow = hWindowControl2.HalconWindow;//初始化视窗变量
- this.btnImagePro.Enabled = false;
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- //开启图档
- private void button1_Click(object sender, EventArgs e)
- {
- openFileDialog1.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*|TIFF文件|*.tiff*";
- openFileDialog1.RestoreDirectory = true;
- openFileDialog1.FilterIndex = 1;
- if (openFileDialog1.ShowDialog() == DialogResult.OK)
- {
- ImagePath = openFileDialog1.FileName;
- HD.ReadImage(hWindowControl2.HalconWindow, ImagePath);
- this.btnImagePro.Enabled = true;
- }
- }
- //彩色图转灰阶处理
- private void button2_Click(object sender, EventArgs e)
- {
- HD.ImagePro();
- this.btnImagePro.Enabled = false;
- }
- //调整影像大小
- private void button3_Click(object sender, EventArgs e)
- {
- #region 初始化变量
- // Local iconic variables
- HObject ho_Image;
- // Local control variables
- HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
- // Initialize local and output iconic variables
- HOperatorSet.GenEmptyObj(out ho_Image);
- ho_Image.Dispose();
- HOperatorSet.ReadImage(out ho_Image, ImagePath);
- hv_Width.Dispose(); hv_Height.Dispose();
- #endregion
- #region 缩放图像,适应窗口
- bool needResizeImage = true;
- //获取图像大小及纵横比
- HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
- int im_width = int.Parse(hv_Width.ToString());
- int im_height = int.Parse(hv_Height.ToString());
- double im_AspectRatio = (double)(im_width) / (double)(im_height);
- //获取窗口大小及纵横比
- int w_width = hWindowControl2.Size.Width;
- int w_height = hWindowControl2.Size.Height;
- double w_AspectRatio = (double)(w_width) / (double)(w_height);
- HOperatorSet.SetSystem("int_zooming", "false");//图像缩放之前最好将此参数设置为false.
- HTuple para = new HTuple("constant");
- HObject ho_zoomImage;
- HOperatorSet.GenEmptyObj(out ho_zoomImage);
- ho_zoomImage.Dispose();
- if (w_width < im_width && im_AspectRatio > w_AspectRatio)
- {
- //超宽图像
- HOperatorSet.ZoomImageSize(ho_Image, out ho_zoomImage, w_width, w_width / im_AspectRatio, para);
- }
- else if (w_height < im_height && im_AspectRatio < w_AspectRatio)
- {
- //超高图像
- HOperatorSet.ZoomImageSize(ho_Image, out ho_zoomImage, w_height * im_AspectRatio, w_height, para);
- }
- else
- {
- needResizeImage = false;
- }
- #endregion
- #region 显示图像
- hwindow.SetPart(0, 0, -2, -2);
- if (needResizeImage)
- {
- hwindow.DispObj(ho_zoomImage);
- }
- else
- {
- hwindow.DispObj(ho_Image);
- }
- #endregion
- ho_Image.Dispose();
- ho_zoomImage.Dispose();
- hv_Width.Dispose();
- hv_Height.Dispose();
- }
- }
- public partial class HDevelopExport
- {
- public HTuple hv_ExpDefaultWinHandle;
- // 局部标志性变量
- HObject ho_Image, ho_GrayImage;
- public void InitHalcon()
- {
- // HDevelop中使用的默认设置
- HOperatorSet.SetSystem("do_low_error", "false");
- }
- public void ReadImage(HTuple Window,string path)
- {
- hv_ExpDefaultWinHandle = Window;
- // 初始化局部和输出图标变量
- HOperatorSet.GenEmptyObj(out ho_Image);
- HOperatorSet.GenEmptyObj(out ho_GrayImage);
- //读取图片
- //dev_close_window(...);
- ho_Image.Dispose();
- HOperatorSet.ReadImage(out ho_Image, path);
- //dev_open_window(...);
- HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
- }
- //灰阶处理
- public void ImagePro()
- {
- ho_GrayImage.Dispose();
- HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
- HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);
- ho_Image.Dispose();
- ho_GrayImage.Dispose();
- }
- //
- //
- }
- }
复制代码
|