最新发布的LEADTOOLS包含了Xamarin的相机控制.这个控件不需要编写原生的iOS或Android摄像头代码。开发人员现在可以在Xamarin中设计摄像头控件。用一行代码形成应用程序。
下面是一个教程,介绍如何从使用Xamarin相机控件拍摄的图像的条形码中提取数据。对于使用原生iOS/Android代码访问设备摄像头以识别条形码的开发者来说,这个示例非常有用。
看一下下面的内容,你会发现使用这个控件比使用本机代码要简单得多。如果你对Xamarin Camera Control或LEADTOOLS SDK的任何部分有其他想法或问题,请务必让我们知道!
建立你的项目
第一步是通过注册获取免费的30天评估许可证//m.ahtuanjie.com/downloads/nuget.
创建一个新项目
一旦你有了LEADTOOLS许可证,打开Visual Studio 2017并创建一个新项目。在Visual c#选项卡中,选择跨平台>移动应用程序(Xamarin Forms)。在下一页中,选择“空白”,在“代码共享策略”下勾选“平台和共享项目”为Android和iOS。这将为您提供Xamarin的起始模板。表单应用程序。
开始使用Leadtools.Camera。Xamarin的,you must add references to the appropriate NuGet packages. To modify NuGet packages for the entire solution, right-click the solution in Visual Studio and select Manage NuGet packages for Solution.
您需要安装的NuGet包有:
- Leadtools.Camera.Xamarin
- Leadtools。条形码
设置访问设备摄像头的权限
需要做的另一件重要的事情是更新权限设置,以请求对相机的访问。要做到这一点,打开位于XamarinCameraProject属性文件夹中的AndroidManifest.xml。Android项目,并在manifest元素中添加以下行,而不是在application元素中:
< uses-permission android: name = " android.permission。CAMERA" /> < /清单>
现在打开MainActivity.cs,用以下代码替换OnCreate函数:
OnCreate(Bundle savedInstanceState) {TabLayoutResource = Resource.Layout.Tabbar;ToolbarResource = Resource.Layout.Toolbar;base.OnCreate (savedInstanceState);RequestCameraPermission ();Xamarin.Forms.Forms。Init(这个,savedInstanceState);LoadApplication(新应用程序());} private void RequestCameraPermission() {const int requestPermissionCode = 0;如果(ContextCompat。CheckSelfPermission(这个,Manifest.Permission.Camera) !=权限。& & ContextCompat予以否认。CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != Permission.Denied && ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != Permission.Denied) return; ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.Camera, Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage }, requestPermissionCode); }
对于iOS,打开信息。XML编辑器中的plist文件(Visual Studio的默认GUI似乎不支持这一点),并在dict元素中添加以下行:
NSCameraUsageDescription 该应用程序需要访问相机拍照。NSPhotoLibraryUsageDescription < /字符串> < / dict >
现在打开iOS项目中的AppDelegate.cs文件,并将FinishedLaunching函数替换为以下内容:
public override bool已完成启动(UIApplication app, NSDictionary选项){Leadtools.Camera.Xamarin.iOS.Assembly.Use();全球:Xamarin.Forms.Forms.Init ();LoadApplication(新应用程序());返回基地。FinishedLaunching(应用程序,选择);}
的代码
LEADTOOLS相机控制是Xamarin。窗体控件,该控件显示实时摄像机预览。可以在两行代码中完成设置。打开主页。并将以下引用添加到Leadtools.Camera.Xamarin程序集。
xmlns: leadtools = " clr-namespace: Leadtools.Camera.Xamarin;装配= Leadtools.Camera.Xamarin”
现在用Xamarin CameraView替换StackLayout中默认的自动生成的标签,以及一个用于拍照的按钮。
接下来,打开mainpage . xml .cs,并在InitializeComponent()之前添加以下行,以设置您之前收到的LEADTOOLS许可证,并初始化LEADTOOLS Camera控件所需的程序集。您必须设置您的许可证,否则应用程序将在运行时抛出异常。
#如果__IOS__ Leadtools.Converters.Assembly.Use ();# endif Leadtools.Core.Assembly.Use ();Leadtools.Svg.Assembly.Use ();Leadtools.Camera.Xamarin.Assembly.Use ();Leadtools.Platform.RuntimePlatform = Device.RuntimePlatform;Leadtools.RasterSupport.Initialize(这个);const string licString = "[License]∖n" + "License = 2.0 ' PASTE YOUR License CONTENTS HERE ' ";const string developerKey = "在这里粘贴您的开发人员密钥";var licBytes = System.Text.Encoding.UTF8.GetBytes(licString);Leadtools.RasterSupport。SetLicense(licBytes, developerKey); InitializeComponent(); }
现在已经建立了应用程序的基础,添加代码从使用相机控制拍摄的图像中读取条形码。在CameraView类中有一个名为picturerreceived的事件,当调用ICamera.TakePicture()捕获图像时触发该事件。对TakePicture方法的调用将在按钮单击事件中进行。
void SnapClicked(对象发送器,EventArgs args) {leadCamera.Camera.TakePicture();}
要为picturerreceived创建事件处理程序,在InitializeComponent()之后添加以下代码行:
leadCamera.CameraOptions.AutoRotateImage = true;leadCamera。PictureReceived + = LeadCamera_PictureReceived;
每次picturerreceived被触发时,它将调用传递FrameHandlerEventArgs的leadcamera_picturerreceived。FrameHandlerEventArgs有三个属性:
- 数据,捕获的图像数据
- 图像,与捕获操作相关联的RasterImage
- RotationDegree即将相框旋转到纵向所需的旋转角度
在这个项目中,我们使用Image属性获取捕获的图像,然后从中读取和提取条形码数据。让我们创建另一个函数,它将获取图像并读取找到的任何条形码。这个事件的函数现在应该像这样:
private void leadcamera_picturerreceived (FrameHandlerEventArgs e) {ReadBarcodes(e. image);}
接下来,向新的ReadBarcodes函数添加代码,该函数接受一个RasterImage。LEADTOOLS是市场上最全面的条形码工具包,可以检测和解码100多种线性和二维条码类型的二进制和彩色图像。
public void ReadBarcode(RasterImage image) {try {var reader = new BarcodeEngine().Reader;var dataArray = reader。LeadRect ReadBarcodes(图片。空的,0,零);if (dataArray == null) {Device.BeginInvokeOnMainThread(() => {DisplayAlert("Alert", "No barcodes were found", "OK");});返回;} var sb = new StringBuilder();sb.AppendLine ($ {dataArray”。长度}条形码(s)发现“);sb.AppendLine (); foreach (var data in dataArray) { sb.AppendLine($@" Symbology: {data.Symbology} Location: {data.Bounds.ToString()} Data: {data.Value}"); } Device.BeginInvokeOnMainThread(() => { DisplayAlert("Found Barcode(s)", sb.ToString(), "OK"); }); } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { DisplayAlert("Alert", ex.ToString(), "OK"); }); } }
这就是它!现在在您的设备上构建并运行应用程序并读取一些条形码!
Xamarin为Xamarin开发人员提供了一个强大的高级API来访问和控制移动相机硬件,而不需要知道与每个本机API相关的所有特性。
需要帮助把这个样本安装起来吗?通过电子邮件或聊天联系我们的技术支持团队获得免费技术支持!





广播:露珠- 2019年4月2日(#2930)|晨露