如何让.NET MAUI相机识别旋转的条码?
解决.NET MAUI Camera.MAUI设置AutoRotate后条码识别失效问题
当你直接新建BarCodeOptions实例并仅设置AutoRotate = true时,会覆盖控件默认的条码格式配置——默认情况下PossibleFormats会被设为空集合,导致相机没有启用任何条码格式的识别能力,因此无法检测到条码。
两种可行的解决方法:
方法一:基于默认配置修改(推荐)
直接在默认的BarCodeOptions上修改AutoRotate属性,保留原有支持的条码格式:
public ScansionaProdotto() { InitializeComponent(); // 基于默认选项开启自动旋转,保留所有默认支持的条码格式 cameraView.BarCodeOptions.AutoRotate = true; }
方法二:显式指定需要识别的条码格式
如果需要自定义支持的条码类型,可新建BarCodeOptions并显式声明PossibleFormats:
using ZXing; public ScansionaProdotto() { InitializeComponent(); cameraView.BarCodeOptions = new() { AutoRotate = true, // 添加你需要识别的条码格式,示例包含常见类型 PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.EAN_13, BarcodeFormat.CODE_128, BarcodeFormat.QR_CODE, BarcodeFormat.UPC_A } }; }
修改后的完整后台代码(以方法一为例)
public partial class ScansionaProdotto : ContentPage { public ScansionaProdotto() { InitializeComponent(); cameraView.BarCodeOptions.AutoRotate = true; } private void cameraView_CamerasLoaded(object sender, EventArgs e) { if(cameraView.Cameras.Count > 0) { cameraView.Camera = cameraView.Cameras.First(); MainThread.BeginInvokeOnMainThread(async () => { await cameraView.StopCameraAsync(); await cameraView.StartCameraAsync(); }); } } private void cameraView_BarcodeDetected(object sender, Camera.MAUI.ZXingHelper.BarcodeEventArgs args) { MainThread.BeginInvokeOnMainThread(() => { barcodeResult.Text = $"{args.Result[0].BarcodeFormat}: {args.Result[0].Text}"; }); } }
这样修改后,相机既能识别旋转/倒置的条码,也能正常检测默认(或指定)的条码格式。
内容的提问来源于stack exchange,提问作者DigioMatthy
相关产品推荐
相关产品推荐

