.NET MAUI 条码扫描器不适用于一维码

.NET MAUI barcode scanner does not work for 1D codes

提问人:ape 提问时间:10/8/2023 更新时间:10/8/2023 访问量:223

问:

我在使用 Camera.MAUI 库扫描代码时遇到了问题。当我扫描二维码时,一切都正常。当我想扫描一维码时,扫描仪没有检测到它。 我尝试了来自互联网和产品的各种条形码(例如超高温灭菌牛奶条形码)。它不会每次都检测到此代码。

我在 .net 7.0 中创建应用程序。下面是代码。

*.xaml 文件:

<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:cv="clr-namespace:Camera.MAUI;assembly=Camera.MAUI"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Class="InvScanPro.Views.ScannerPage">
    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30"
            VerticalOptions="Center">
            
            <cv:CameraView
                x:Name="CameraView"
                HeightRequest="450"
                WidthRequest="350"
                CamerasLoaded="CameraView_CamerasLoaded"
                BarCodeDetectionEnabled="True"
                BarcodeDetected="CameraView_BarcodeDetected"/>

        </VerticalStackLayout>
    </ScrollView>
</toolkit:Popup>

*.xaml.cs文件:

public partial class ScannerPage : Popup
{
    private bool _isScanning;

    public ScannerPage()
    {
        InitializeComponent();

        InitializeBarCodeOptions();
    }

    private void InitializeBarCodeOptions()
    {
        CameraView.BarCodeOptions = new BarcodeDecodeOptions
        {
            AutoRotate = true,

            PossibleFormats =
            {
                ZXing.BarcodeFormat.QR_CODE,
                ZXing.BarcodeFormat.All_1D
            }
        };
    }

    private void CameraView_CamerasLoaded(object sender, EventArgs e)
    {
        if (CameraView.Cameras.Count <= 0) return;

        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)
    {
        if (_isScanning) return;

        MainThread.BeginInvokeOnMainThread(async () =>
        {
            _isScanning = true;
            Vibration.Default.Vibrate(new TimeSpan(0, 0, 0, 0, 100));
            await CameraView.StopCameraAsync();
            await CloseAsync(args.Result[0].Text);
        });
    }
}

MauiProgram.cs

        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()            
            .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        })
            .UseMauiCameraView()
            .UseMauiCommunityToolkit();
C# 毛伊岛 条码扫描器

评论

0赞 Martheen 10/8/2023
通常,如果您更具体地使用条形码类型而不是All_1D,则可以大大改善检测
0赞 ape 10/9/2023
例如,我尝试设置仅 128 代码(没有 QR),但它也不起作用。我曾经设法用这些设置扫描一个一维码(我不知道是什么类型),所以我认为我配置了 CameraView。

答: 暂无答案