Dalsa 8K彩色相机Camera link C#采图

一个采图工具,所以界面做的很简单。
private SapAcquisition m_Acquisition;
private SapBuffer m_Buffers;
private SapAcqToBuf m_Xfer;
private SapView m_View;
private SapColorConversion m_ColorConv;
private SapProcessing m_Pro;
private SapLocation m_ServerLocation;
private String m_ConfigFileName;
private String m_Executetime;
private bool m_IsSignalDetected;
private bool m_online;
public bool CreateNewObjects()
{
m_ServerLocation = new SapLocation("Xtium-CL_MX4_1", 2);//第一位是显卡名称,第二位是选择模式的第几项
m_ConfigFileName = "22N_No_Name_Default_Default.ccf";//配置文件路径
m_Acquisition = new SapAcquisition(m_ServerLocation, m_ConfigFileName);
if (SapBuffer.IsBufferTypeSupported(m_ServerLocation, SapBuffer.MemoryType.ScatterGather))
m_Buffers = new SapBufferWithTrash(2, m_Acquisition, SapBuffer.MemoryType.ScatterGather);
else
m_Buffers = new SapBufferWithTrash(2, m_Acquisition, SapBuffer.MemoryType.ScatterGatherPhysical);
m_Xfer = new SapAcqToBuf(m_Acquisition, m_Buffers);
m_ColorConv = new SapColorConversion(m_Acquisition, m_Buffers);
m_Xfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; m_Xfer.XferNotify += new SapXferNotifyHandler(xfer_XferNotify);
m_Xfer.XferNotifyContext = this; m_Pro = new SapMyProcessing(m_Buffers, m_ColorConv, new SapProcessingDoneHandler(ProCallback), this); if (!CreateObjects())
{
DestroyObjects();
DisposeObjects(); return false;
}
EnableSignalStatus();
return true;
} //这项函数官方demo是用来显示帧率的,但是我这里不需要所以就没写功能,但是要加这个函数,否则连续采集的时候就只会拍两张照片。
static void ProCallback(object sender, SapProcessingDoneEventArgs pInfo)
{
Form1 demo = pInfo.Context as Form1; }
private bool CreateObjects()
{
// Create acquisition object
if (m_Acquisition != null && !m_Acquisition.Initialized)
{
if (m_Acquisition.Create() == false)
{
DestroyObjects();
return false;
}
}
// Create buffer object
if (m_Buffers != null && !m_Buffers.Initialized)
{
if (m_Buffers.Create() == false)
{
DestroyObjects();
return false;
}
m_Buffers.Clear();
} // Create color conversion object
if (m_ColorConv != null && !m_ColorConv.Initialized)
{
if (m_ColorConv.Create() == false)
{
DestroyObjects();
return false;
}
} // Create view object
if (m_View != null && !m_View.Initialized)
{
if (m_ColorConv != null && m_ColorConv.Initialized)
{
// Set buffer to be viewed
// When using hardware color decoder, view the acquired RGB buffer,
// otherwise, for software color conversion, view the converted RGB buffer.
SapBuffer convBuffer = m_ColorConv.OutputBuffer;
if (convBuffer != null && convBuffer.Initialized)
m_View.Buffer = convBuffer;
else
m_View.Buffer = m_Buffers;
} if (m_View.Create() == false)
{
DestroyObjects();
return false;
}
}
// Create Xfer object
if (m_Xfer != null && !m_Xfer.Initialized)
{
if (m_Xfer.Create() == false)
{
DestroyObjects();
return false;
}
m_Xfer.AutoEmpty = false;
} // Create processing object
if (m_Pro != null && !m_Pro.Initialized)
{
if (!m_Pro.Create())
{
DestroyObjects();
return false;
} m_Pro.AutoEmpty = true;
}
return true; }
private void DestroyObjects()
{
if (m_Xfer != null && m_Xfer.Initialized)
m_Xfer.Destroy();
if (m_Pro != null && m_Pro.Initialized)
m_Pro.Destroy();
if (m_View != null && m_View.Initialized)
m_View.Destroy();
if (m_ColorConv != null && m_ColorConv.Initialized)
m_ColorConv.Destroy();
if (m_Buffers != null && m_Buffers.Initialized)
m_Buffers.Destroy();
if (m_Acquisition != null && m_Acquisition.Initialized)
m_Acquisition.Destroy();
}
private void DisposeObjects()
{
if (m_Xfer != null)
{ m_Xfer.Dispose(); m_Xfer = null; }
if (m_Pro != null)
{ m_Pro.Dispose(); m_Pro = null; }
if (m_View != null)
{ m_View.Dispose(); m_View = null; }
if (m_ColorConv != null)
{ m_ColorConv.Dispose(); m_ColorConv = null; }
if (m_Buffers != null)
{ m_Buffers.Dispose(); m_Buffers = null; }
if (m_Acquisition != null)
{ m_Acquisition.Dispose(); m_Acquisition = null; }
}
private void EnableSignalStatus()
{
if (m_Acquisition != null)
{
m_IsSignalDetected = (m_Acquisition.SignalStatus != SapAcquisition.AcqSignalStatus.None);
// if (m_IsSignalDetected == false)
// StatusLabelInfo.Text = "Online... No camera signal detected";
// else
// StatusLabelInfo.Text = "Online... Camera signal detected";
m_Acquisition.SignalNotifyEnable = true; }
} static void xfer_XferNotify(object sender, SapXferNotifyEventArgs argsNotify)
{
Form1 demo = argsNotify.Context as Form1;
// If grabbing in trash buffer, do not display the image, update the
// appropriate number of frames on the status bar instead
if (argsNotify.Trash)
return;
// Refresh view
else
{
demo.TakeImage();
demo.m_Pro.ExecuteNext();
}
}
private void button1_Click(object sender, EventArgs e)
{
m_Xfer.Grab();
}
private void button2_Click(object sender, EventArgs e)
{
m_Xfer.Freeze();
}
private void TakeImage()
{
try
{
SapBuffer m_pBuffer;
int m_StartFrame;
// SapBuffer.FileFormat[] m_StandardTypes;
m_pBuffer = m_Buffers;
m_StartFrame = m_pBuffer.Index; string m_Option = "-format jpeg -quality 30";
m_Buffers.Save(textBox2.Text, m_Option, m_StartFrame,0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
关于采图,上面用的是官方的SDK方式,因为我采集的图片像素是8K*8K,原图BMP格式有256MB,压缩成30%质量的JPG也还有2.3MB左右。
还有一种方式是用Bitmap来获取图片地址,但是需要注意的一点。
IntPtr addr;
int Height = m_Buffers.Height;
int Width = m_Buffers.Width;
m_Buffers.GetAddress(out addr);
bitmap = new Bitmap(Width, Height, Width * 4, System.Drawing.Imaging.PixelFormat.Format32bppRgb, addr);
这里的宽度是*4,原因是我的BMP原图图像位深度是32位的。所以保存用Bitmap的方式需要先确定原图的位深度,否则保存图片会出现重影。
Dalsa 8K彩色相机Camera link C#采图的更多相关文章
- VisionPro连接Dalsa线扫相机
1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...
- 图像采集系统的Camera Link标准接口设计
高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ...
- 视频采集接口camera link 在8148中的应用
(1)应用背景 (2)camera link 简介 (3)camera link 与8148 (4)camera link 应用实例 ---------------------author:pkf - ...
- 115-基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台
基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有高可靠性.效率大化.无操作系统的智能视频处理卡,是机器视觉开发上的选. ...
- 115-基于TI TMS320DM6467T Camera Link 机器视觉 智能图像分析平台
基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有超高可靠性.效率最大化.无操作系统的智能视频处理卡,是机器视觉开发上的首选 ...
- Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析
下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...
- 基于Camera Link和PCIe DMA的多通道视频采集和显示系统
基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...
- 10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台
基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台 1.板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含一片TI DSPTMS3 ...
- 135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台
基于TMS320C6678.FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台 一.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采 ...
随机推荐
- 【Android开发艺术探索】理解Window和WindowManager
个人博客: http://www.milovetingting.cn 理解Window和WindowManager Window表示一个窗口的概念,是一个抽象类,具体实现是PhoneWindow,可以 ...
- Oracle导出警告“EXP-00003: 未找到段 (0,0) 的存储定义”解决
环境:CentOS7.4 Oracle11.2.0.4(搭建rac集群) 问题描述:在使用exp命令执行导出的时候,部分表提示“EXP-00003: 未找到段 (0,0) 的存储定义”警告. 问题 ...
- 《自拍教程25》在Linux上配置环境变量
我们说的环境变量,一般是指的是PATH环境变量, Linux我们用Ubuntu操作系统来举例. 我们从官网下载了Sublime Text的Linux已编译好的包. https://download.s ...
- Linux基础:df命令总结
本文只总结一些常用的用法,更详细的说明见man df和 df --help. df命令 df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. df命令主要是从各文件系统的Super b ...
- P2214 [USACO14MAR]哞哞哞Mooo Moo
链接:Miku ---------------------- 这道题还是个背包 --------------------- 首先看一下声音的组成,对于每一个农场的声音,它是由两部分组成的 :上一个农场 ...
- beego框架之orm模块——mysql
参考beego原文:http://beego.me/docs/mvc/model/orm.md#main.go beego ORM 是一个强大的 Go 语言 ORM 框架,orm模块主要是处理MVC中 ...
- grep 基本用法
grep usage: grep [options]... pattern [file]... 如果file缺省,会从 stdin 读取 $ grep --help -i 忽略大小写 -n 显示行号 ...
- 使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 使用SignalR从服务端主动推送警报日志到各种终端(桌面.移动.网页) 阅读导航 本文背景 ...
- C# MVC 中自定义权限特性[Authorize]中对于Ajax访问的处理
在MVC中定义自己的权限特性. 下例中是简单的登录判断,登录信息存与Session中,如果Session中没有登录信息,那么就不通过. 在处理无权限的时候,判断当前请求是否为Ajax请求,如果是Aja ...
- CSS中before、after伪类选择器的巧用
大家好,今天给大家带来使用css中 before . after 实现两个效果,话不多说,我们先来看看, before 和 after 它们的作用是什么 选择器 作用 before 向选定的元素前插入 ...