C#关于halcon和DALSA工业相机图片获取开发

Hassan猿 2021-02-25 06:57:10
诚心请教!在网上找的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就不往下执行了,图片既没有展示也没有保存下来。
...全文
1598 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmycom 2021-03-03
  • 打赏
  • 举报
回复
你先用halcon 的 工具先把相机和halcon 代码跑通先,测试没问题,再输出C#代码。然后把这个C#代码的类,丢到你的工程里,用一个全局变量 去获得halcon的赋值,再做这个事情吧。如果halcon 代码在工具里都没跑通,出来的必然是BUG。
Hassan猿 2021-03-03
  • 打赏
  • 举报
回复
感谢回复,我已经解决了问题,不再用halcon来进行采集和保存图片,使用了DALSA工业相机SDK提供的内部save方法,halcon只用来采集和保存图片实在大材小用了
tonycjl 2022-07-19
  • 举报
回复
@Hassan猿 请问一下,SDK需要不需要插保护狗的。能不能分享一下
飞天凤凰601 2021-03-02
  • 打赏
  • 举报
回复
说句实话,这些还是调用C++库好些,C#真的不适合干这事

111,111

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧