一个采图工具,所以界面做的很简单。

        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#采图的更多相关文章

  1. VisionPro连接Dalsa线扫相机

    1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...

  2. 图像采集系统的Camera Link标准接口设计

    高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ...

  3. 视频采集接口camera link 在8148中的应用

    (1)应用背景 (2)camera link 简介 (3)camera link 与8148 (4)camera link 应用实例 ---------------------author:pkf - ...

  4. 115-基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台

    基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有高可靠性.效率大化.无操作系统的智能视频处理卡,是机器视觉开发上的选.  ...

  5. 115-基于TI TMS320DM6467T Camera Link 机器视觉 智能图像分析平台

    基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有超高可靠性.效率最大化.无操作系统的智能视频处理卡,是机器视觉开发上的首选 ...

  6. Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析

    下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...

  7. 基于Camera Link和PCIe DMA的多通道视频采集和显示系统

    基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...

  8. 10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台

    基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台 1.板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含一片TI DSPTMS3 ...

  9. 135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台

    基于TMS320C6678.FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台 一.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采 ...

随机推荐

  1. apache主配置文件httpd.conf详解

    [root@lamp conf]# vi httpd.conf.bak 1 # 2 # This is the main Apache HTTP server configuration file. ...

  2. TortoiseGit 绑定 GitHub/Gitee ssh秘钥

    小乌龟生成私钥和公钥 打开PuTTYgen 生成公钥/私钥文件 打开Pageant添加私钥.ppk文件 打开公钥文件获取key 打开GitHub/Gitee添加公钥 Gitee GitHub

  3. Python和Anoconda和Pycharm安装教程

    简介 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. ...

  4. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  5. Prime_Series_Level-1

    0x01 先收集靶机端口,目录信息 1)nmap扫描端口 开启了ssh服务和apache服务,搜索相关漏洞 只有一个ssh用户名枚举,先放着 2)dirb爆破目录 dirb http://192.16 ...

  6. 小白的linux笔记4:几种共享文件方式的速度测试——SFTP(SSH)/FTP/SMB

    测试一下各个协议的速度,用一个7205M的centos的ISO文件上传下载.5Gwifi连接时,本地SSD(Y7000)对服务器的HDD: smb download 23M/s(资源管理器) smb ...

  7. 剑指offer-面试题64-求1+2+...+n-发散思维

    /* 题目: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C) */ /* 思路: 递归. */ #incl ...

  8. Qt编写的项目作品1-自定义控件大全

    一.功能特点 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的控件数量. 每个类都可以 ...

  9. linux命令——find

    简介:find是Linux系统中的常用命令(应用程序)之一.它是用来在指定目录层次结构(指定目录的子目录以及子目录的子目录)中查找符合指定条件的文件和目录 一:语法结构 find [directory ...

  10. 【IDE】IDEA - 使用问题记录

    1.显示方法API:类似eclipse把鼠标放到方法上有api信息. setting/keymap中搜索 quick docs:(有说默认快捷键是ctrl+q,但我的不是待查找快捷键) 2.forea ...