一、环境说明
操作系统:win 10
开发环境:visual studio 2019
参考资料-官方文档:Welcome to the Phase One Software Development Kits (SDKs) — Phase One SDK's 2.0.48 documentation
SDK 下载地址:Download — Phase One SDK's 2.0.48 documentation
二、下载Phase One SDK
Phase One SDK 由 【camera SDK 】和【 image SDK 】组成,camera SDK 用于控制相机,常用于设置相机参数、接收图像等,image SDK 用于控制拍摄影像,处理元数据、裁剪、缩放等。进入下载地址(文章发表时)根据需求自行下载对应版本,本文仅面向windows系统版本。
下载完成后解压缩,得到 【p1camerasdk-windows\dest】 和 【p1imagesdk-windows\dest】 两个目录文件夹,文件夹中有很多东西,但对我们有用的只有【 Cs 】文件夹,里面分别包含了两个动态链接库【 CameraSdkCs.dll 】、【 CameraSdkCBindingsForCs.dll 】、【 ImageSdkCs.dll 】、【 ImageSdkCBindingsForCs.dll 】,通过引用动态链接库即可使用 Phase SDK。
三、调用Phase One SDK
1、C# 控制台应用程序调用 Phase One SDK
在官方参考资料中,提供了如何使用 PowerShell 或者 cmd 控制台 创建控制台应用程序的方法,在这里不再赘述,详见参考资料。我将介绍使用vs 2019创建并配置的方法。
(1)创建一个控制台应用程序(.NET Core)
使用VS 2019正常创建一个控制台应用项目,如果过程和下图不一样,并且创建后的没有根据模板生成相应的应用程序,可能是vs 2019的版本过低,更新后即可解决。
(2)引用Phase One SDK
将要待引用的两个SDK复制到项目中,保留【Cs】及其内部的动态链接库。
双击项目名【PhaseTest_Core】,打开 .csproj 工程文件,在与 <PropertyGroup> 标签同级下使用<ItemGroup> 标签进行动态链接库的引用,工程文件的代码为:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework></PropertyGroup><ItemGroup><!-- 引用 CameraSDK C# API --><Reference Include="CameraSdkCs.dll"><HintPath>dest1/Cs/CameraSdkCs.dll</HintPath></Reference><!-- 引用 ImageSDK C# API --><Reference Include="ImageSdkCs.dll"><HintPath>dest2/Cs/ImageSdkCs.dll</HintPath></Reference><!-- CameraSDK C# API 的依赖关系 --><None Include="dest1/Cs/CameraSdkCBindingsForCs.dll" Link="CameraSdkCBindingsForCs.dll"><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory></None><!-- ImageSDK C# API 的依赖关系 --><None Include="dest2/Cs/ImageSdkCBindingsForCs.dll" Link="ImageSdkCBindingsForCs.dll"><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory></None></ItemGroup></Project>
出现下图两个引用即表示完成。
(3)调用SDK完成工程需求
测试一下,是否完成引用。打开【Program.cs】,加入 Using 指令进行调用,需要注意的是,不能直接 Using CameraSdk、Using ImageSdk ,正确调用代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using P1.CameraSdk; // 引用相机SDK
using P1.ImageSdk; // 引用影像SDK
在主函数中加入示例代码,测试获取连接的相机,主函数为:
static void Main(string[] args){Console.WriteLine("Hello World!");Console.WriteLine("检测已连接的可使用的摄像机...");IEnumerable<CameraDescriptor> cameras = Camera.GetAvailableCameras();//获取所有相机foreach (var camera in cameras) //遍历相机{Console.WriteLine("* {0}", camera);//输出相机信息}if (cameras.Any() == false){Console.WriteLine("没有找到可用的摄像机!");}}
示例完成了获取可使用的所有相机,运行调试:
完成测试,读者可以开始完成自己的项目需求。
2、C# 桌面应用程序调用 Phase One SDK
(1)创建一个桌面应用程序(.NET Framework)
(2)引用及测试 Phase One SDK
通常情况下,桌面应用程序的引用比较简单,右键【项目】→【添加引用】→【浏览】找到需要引用的.dll文件,即可完成对动态链接库的引用。但此时直接引用【CameraSdkCBindingsForCs.dll 】、【 ImageSdkCBindingsForCs.dll 】会出现下图所示报错:
首先猜测是否桌面应用程序不需要这两个库。在窗体中设置一个按钮【获取相机】实现点击获取所有相机的小功能,并在文本框中输出提示:
双击按钮跳转到点击函数,同上文加入 Using 指令进行调用,按钮点击响应函数中输入代码:
textBox1.Text = "检测已连接的可使用的摄像机..." + '\n';IEnumerable<CameraDescriptor> cameras = Camera.GetAvailableCameras();//获取所有相机foreach (var camera in cameras) //遍历相机{textBox1.Text += camera.ToString() + "\n";}if (cameras.Any() == false){textBox1.Text += "没有找到可用的摄像机!" + "\n";}
测试运行,结果发现报错如下图,意思是没有在Debug目录下找到对应的库,证明上文推测错误,那两个不能直接引用的库是必须的。
那既然找不到,就直接复制进Debug目录吧,(感觉这也是一些库的用法)。测试运行,发现报错如下图,报错代码为:0x8007000B:
查了异常代码的含义,应该是解决方案的平台不对,一般VS默认平台是【Any CPU】,再回过头看SDK的开发文档,发现环境应该是Windows10,64位:
按下图新建64位平台:
再次运行调试,注意:需要将【CameraSdkCBindingsForCs.dll 】、【 ImageSdkCBindingsForCs.dll 】手动复制到项目【bin】→【x64】→【Debug】目录下。
至此,完成了桌面应用程序对Phase One SDK引用和调试,读者可以开始完成自己的项目需求。SDK包含的各种功能接口详见参考资料官方文档。