C#关于halcon和DALSA工业相机图片获取开发
诚心请教!在网上找的demo,C#开发,使用halcon和DALSA的dll。
目前识别相机、获取相机信息、连接相机、各种实例化包括实时帧率都是OK的,就是到了halcon获取图片数据就出问题了。
下面贴代码:
void m_Xfer_XferNotify(object sender, SapXferNotifyEventArgs argsNotify)
{
//首先需判断此帧是否是废弃帧,若是则立即返回,等待下一帧(但这句话似乎有时候m_Xfer.Snap(n)时会导致丢帧,可以注释掉试试)
if (argsNotify.Trash) return;
//获取m_Buffers的地址(指针),只要知道了图片内存的地址,其实就能有各种办法搞出图片了(例如转成Bitmap)
IntPtr addr;
m_Buffers.GetAddress(out addr);
MessageBox.Show("addr="+addr);
//PixelFormat pf = PixelFormat.Format8bppIndexed;
//Bitmap bmp = new Bitmap(m_Buffers.Width, m_Buffers.Height, m_Buffers.Pitch, pf, addr);
//观察buffer中的图片的一些属性值,语句后注释里面的值是可能的值
int count = m_Buffers.Count; //2
SapFormat format = m_Buffers.Format; //Uint8
double rate = m_Buffers.FrameRate; //采集频率30.0,连续采集时,这个值会动态变化
MessageBox.Show("rate=" + rate);
int height = m_Buffers.Height; //1000高
int width = m_Buffers.Width; //4096宽
int pixd = m_Buffers.PixelDepth; //8深度,8b/像素
//显示实时帧率
UpdateFrameRate();
lbl_FrameRate.BeginInvoke(new Action(() => { lbl_FrameRate.Text = m_Buffers.FrameRate.ToString(); }));
MessageBox.Show("FrameRate=" + m_Buffers.FrameRate.ToString());
//利用halcon从内存中采集图片并保存
HObject ImageTemp = null;
HOperatorSet.GenImage1(out ImageTemp, "byte", 4096, 1000, addr);//取内存数据,生成图像,halcon实现
MessageBox.Show("==");
hWindowControl1.HalconWindow.SetPart(0, 0, 1000, 4096);
HOperatorSet.DispObj(ImageTemp, hWindowControl1.HalconWindow);
picCountNum++;
HOperatorSet.WriteImage(ImageTemp, "bmp", 0, " D: \\imga\\" + picCountNum + ".bmp");
}
出问题的就是在 HOperatorSet.GenImage1(out ImageTemp, "byte", 4096, 1000, addr);这一行,往下不弹框。
另外比较奇怪的一点,根据弹框的打印情况,我会执行两次,第一次频率为默认30,更新为0,第二次频率为0,更新为实际频率。
最主要的是,希望大家可以指导一下,为什么程序到了GenImage1就不往下执行了,图片既没有展示也没有保存下来。