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标准,采 ...
随机推荐
- linux使用和基础操作
1.linux系统初使用 linux有图形终端和字符终端,关于linux学习以字符终端为主,即命令行操作: [root@centos7 ~]#runlevel 查看当前工作模式N 3 //3为字符终端 ...
- SharePoint PowerShell SendEmail
前言 最近碰到这样一个需求,用户需要个简单的定时邮件提醒,就是抓取SharePoint某个列表里的值,然后作为邮件地址/邮件主题/邮件内容发送出去. 自己想了想,既然用户要求每天定时发送,那么肯定是任 ...
- Cesium案例解析(五)——3DTilesPhotogrammetry摄影测量3DTiles数据
目录 1. 概述 2. 案例 3. 结果 1. 概述 3D Tiles是用于传输和渲染大规模3D地理空间数据的格式,例如摄影测量,3D建筑,BIM / CAD,实例化特征和点云等.与常规的模型文件格式 ...
- 【iOS】Spring Animations (弹性动画)
This interface shows how a spring animation can be created by specifying a “damping” (bounciness) an ...
- python打包生成可执行文件教程
python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...
- kuangbin专题 专题九 连通图 POJ 3177 Redundant Paths
题目链接:https://vjudge.net/article/371?tdsourcetag=s_pcqq_aiomsg 题目:给定一个连通图,题目说,任意两个点至少有一条路线可以相互到达, 为保证 ...
- SpringBoot缓存 --(二)Redis单机缓存
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 关于javascript中的内置函数
(1) parseInt()函数 语法:parseInt(string,[n]) 该函数主要将首位为数字的字符串转化为数字,若该字符串不是以数字开头,则返回NaN; n是用于指出字符串中的数据是几 ...
- C# WPF之Material Design自定义颜色
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF之Material Design自定义颜色 阅读导航 本文背景 代码实现 本文参考 ...
- Redis 安装 (未)
Redis 安装步骤 1. 下载地址 2. 版本选择 3. 配置主要参数 4. 关联操作