##C#联合Halcon使用HWindowContorl控件实现显示一张图片功能##
##C#联合Halcon编程实例##
拖动一个button控件与一个HWindowControl控件到窗口中:
代码分为基础显示、按窗口大小填充显示、以图本身比例在窗口显示以及显示一张图片和一个红色的矩形四部分,具体代码如下:
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Demo_003
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
添加Halcon窗体变量时,前面应加索引HObject
添加Halocn普通变量时,前面应加索引HTuple
编写Halcon部分程序时,前面应添加索引HOperatorSet
//批 量 注 释 :ctrl + k ctrl + c
//批量取消注释 :ctrl + k ctrl + u
//基础
HObject hv_Image;
private void button1_Click(object sender, EventArgs e)
{
HOperatorSet.ReadImage(out hv_Image, @"E:\1.png");
//从E:\读取一张名为E:\1.png的图片保存到变量hv_Image,@后面的\不转义
hWindowControl1.HalconWindow.DispObj(hv_Image);
//显示图片。hWindowControl1为C#控件,HalconWindow为Halcon窗体
}
//基础
进阶:
//HImage hv_Image = new HImage();
//int width;
//int height;
//private void button1_Click(object sender, EventArgs e)
//{
// //从E:\读取名为1、png格式的图片存放到hv_Image
// hv_Image.ReadImage(@"E:\1.png");
// //获取图片的宽长
// hv_Image.GetImageSize(out width,out height);
// //修改显示的长宽,按窗口大小填充
// hWindowControl1.HalconWindow.SetPart( 0, 0, height-1, width-1);
// //显示图片
// hWindowControl1.HalconWindow.DispObj(hv_Image);
//}
进阶
以图本身比例在窗口显示(不按窗口大小填充)
//HImage hv_Image = new HImage();
//int width;
//int height;
//private void button1_Click(object sender, EventArgs e)
//{
// //从E:\读取名为1、png格式的图片存放到hv_Image
// hv_Image.ReadImage(@"E:\1.png");
// //获取图片的宽长
// hv_Image.GetImageSize(out width, out height);
// //对显示进行设置
// double ratioWidth = (1.0) * width / hWindowControl1.Width;
// double ratioHeight = (1.0) * height / hWindowControl1.Height;
// HTuple row1,column1,row2,column2;
// if (ratioWidth >= ratioHeight)
// {
// row1 = -(1.0) * (hWindowControl1.Height * ratioWidth) - height;
// column1 = 0;
// row2 = row1 + hWindowControl1.Height * ratioWidth;
// column2 = column1 + hWindowControl1.Width * ratioWidth;
// }
// else
// {
// row1 = 0;
// column1 = 0;
// row2 = row1 + hWindowControl1.Height * ratioWidth;
// column2 = column1 + hWindowControl1.Width * ratioHeight;
// }
// //显示图片
// hWindowControl1.HalconWindow.DispObj(hv_Image);
//}
以图本身比例在窗口显示(不按窗口大小填充)
小练习
显示一张图片和一个红色的矩形
//private void button1_Click(object sender, EventArgs e)
//{
// HObject ho_Image, ho_Rectangle;
// HOperatorSet.GenEmptyObj(out ho_Image);
// HOperatorSet.GenEmptyObj(out ho_Rectangle);
// ho_Image.Dispose();
// HOperatorSet.ReadImage(out ho_Image, @"E:\1.png");
// ho_Rectangle.Dispose();
// HOperatorSet.GenRectangle1(out ho_Rectangle, 30, 20, 100, 200);
// hWindowControl1.HalconWindow.DispObj(ho_Image);
// hWindowControl1.HalconWindow.SetColor("red");
// hWindowControl1.HalconWindow.DispObj(ho_Rectangle);
// ho_Image.Dispose();
// ho_Rectangle.Dispose();
//}
显示一张图片和一个红色的矩形
private void hWindowControl1_HMouseMove(object sender, EventArgs e)
{
}
}
}
基础显示部分,从E:\读取一张名为E:\1.png的图片保存到变量hv_Image并显示:
//基础
HObject hv_Image;
private void button1_Click(object sender, EventArgs e)
{
HOperatorSet.ReadImage(out hv_Image, @"E:\1.png");
//从E:\读取一张名为E:\1.png的图片保存到变量hv_Image,@后面的\不转义
hWindowControl1.HalconWindow.DispObj(hv_Image);
//显示图片。hWindowControl1为C#控件,HalconWindow为Halcon窗体
}
//基础
进阶显示,从E:\读取一张名为E:\1.png的图片保存到变量hv_Image,获取图片的宽长,修改显示的长宽,按窗口大小填充并显示:
//进阶:
HImage hv_Image = new HImage();
int width;
int height;
private void button1_Click(object sender, EventArgs e)
{
//从E:\读取名为1、png格式的图片存放到hv_Image
hv_Image.ReadImage(@"E:\1.png");
//获取图片的宽长
hv_Image.GetImageSize(out width,out height);
//修改显示的长宽,按窗口大小填充
hWindowControl1.HalconWindow.SetPart( 0, 0, height, width);
//显示图片
hWindowControl1.HalconWindow.DispObj(hv_Image);
}
//进阶
以图本身比例在窗口显示(不按窗口大小填充):
//以图本身比例在窗口显示(不按窗口大小填充)
HImage hv_Image = new HImage();
int width;
int height;
private void button1_Click(object sender, EventArgs e)
{
//从E:\读取名为1、png格式的图片存放到hv_Image
hv_Image.ReadImage(@"E:\1.png");
//获取图片的宽长
hv_Image.GetImageSize(out width, out height);
//对显示进行设置
double ratioWidth = (1.0) * width / hWindowControl1.Width;
double ratioHeight = (1.0) * height / hWindowControl1.Height;
HTuple row1,column1,row2,column2;
if (ratioWidth >= ratioHeight)
{
row1 = -(1.0) * (hWindowControl1.Height * ratioWidth) - height;
column1 = 0;
row2 = row1 + hWindowControl1.Height * ratioWidth;
column2 = column1 + hWindowControl1.Width * ratioWidth;
}
else
{
row1 = 0;
column1 = 0;
row2 = row1 + hWindowControl1.Height * ratioWidth;
column2 = column1 + hWindowControl1.Width * ratioHeight;
}
//显示图片
hWindowControl1.HalconWindow.DispObj(hv_Image);
}
//以图本身比例在窗口显示(不按窗口大小填充)
小练习:绘制一张图片和一个红色的矩形:
//小练习
//绘制一张图片和一个红色的矩形
private void button1_Click(object sender, EventArgs e)
{
HObject ho_Image, ho_Rectangle;
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_Rectangle);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, @"E:\1.png");
ho_Rectangle.Dispose();
HOperatorSet.GenRectangle1(out ho_Rectangle, 30, 20, 100, 200);
hWindowControl1.HalconWindow.DispObj(ho_Image);
hWindowControl1.HalconWindow.SetColor("red");
hWindowControl1.HalconWindow.DispObj(ho_Rectangle);
ho_Image.Dispose();
ho_Rectangle.Dispose();
}
文中所用图片:
C#Halcon实例持续更新。