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

        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. k8s pod时区更改

    一.问题所在 在K8S里启动一个容器,该容器的设置的时区是UTC0,但是对于很多客户而言,其主机环境并不在UTC0.例如中国客户在UTC8.如果不把容器的时区和主机主机设置为一致,则在查找日志等时候将 ...

  2. web访问 FastDFS 方法思路

           由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,所以就算这篇你测试上传成功了,你也访问不了. 推荐大家结合 Nginx 使用 fastdfs-nginx-module ...

  3. [Redis-CentOS7]Redis事务操作(六)

    事务操作 隔离操作: 事务中所有的命令都会序列化,按顺序执行,不会被其他命令打扰 原子操作: 事务中所有的命令要么全部执行,要么全部不执行 添加事务并执行 127.0.0.1:6379> MUL ...

  4. Vue开发中的常用技巧(持续更新)

    1. 监听子组件的生命周期例如有父组件Parent和子组件Child,如果父组件监听到子组件挂载mounted就做一些逻辑处理,常规写法可能如下: // Parent.vue <Child @m ...

  5. idea生成构造方法的快捷键(看这篇就够了)

    使用快捷键能加快编写代码的速度和质量 idea生成构造方法的快捷键是Alt+Insert,然后选中Constructor

  6. MySQL锁与事务隔离级别

    一.概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.IO等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并发访 ...

  7. Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧

    1.引言 上个月在知乎上发表的由“袁辉辉”分享的关于TIM进程永生方面的文章(即时通讯网重新整理后的标题是:<史上最强Android保活思路:深入剖析腾讯TIM的进程永生技术>),短时间内 ...

  8. shell脚本监测进程并重启

    本人实例: #!/bin/bash ps -ef | grep elastic | grep -v grepif [ $? -ne 0 ]thenecho "start process... ...

  9. P3945 | 三体问题 (天体物理+计算几何)

    最近终于把<三体Ⅰ·地球往事>和<三体Ⅱ·黑暗森林>看完了! 为了快点认识题目中的歌者文明,已经开始第三部了! 题目背景 @FirstLight0521 出题人在这里哦~ 三体 ...

  10. nCompass-解决方案介绍

    nCompass-解决方案介绍 1.  IT运维的现状及痛点 业务部门投诉系统不可用,各个部门盘查: 网络是通的:系统资源正常:应用进程状态都是正常的:数据库日志中也没有报错 运维被动: 80%的故障 ...