jbyrd
jbyrd

Reputation: 5595

ZXing.Mobile - How to change the size of the camera scanner?

UPDATE:

I've tried implementing this in an App.cs method called OpenCameraScanner (you would call this on click of a button on the page from which you want to scan):

App.cs
------------------------------------------------
public static ZXingScannerPage ScanPage;
public static ZXing.Result ScanResult;

public static async void OpenCameraScanner()
{
    ScanPage = new ZXingScannerPage(customOverlay: customOverlay);
    ScanPage.OnScanResult += (result) =>
    {
        ScanPage.IsScanning = false;
        ScanResult = result;

        Device.BeginInvokeOnMainThread(() =>
        {
            App.CurrentApp.CurrentPage.Navigation.PopModalAsync();
            App.CurrentApp.CurrentPage.DisplayAlert("Scanned Barcode", result.Text, "OK");
        });
    };
    var scanPage = new NavigationPage(ScanPage);
    await App.CurrentApp.CurrentPage.Navigation.PushModalAsync(ScanPage);
}

However, when this method is called, the screen that opens is blank white, and you can't see the camera view behind it. Not sure why?


I'm using ZXing.Mobile in a Xamarin.Forms project (for iOS right now) for camera scanning functionality on an iPad.

Currently, I have it working great with the following 2 lines:

var scanner = new ZXing.Mobile.MobileBarcodeScanner();
var result = await scanner.Scan();

However, when the camera is open to scan, it takes up the entire iPad screen, which is really big.

Question: Is there a way to adjust the size of the camera overlay? (so that it's not full screen)

I see that the scanner.Scan() method takes an optional options parameter of type ZXing.Mobile.MobileBarcodeScanningOptions - I tried playing around with that, but the only possible relevant option there is a CameraResolutionSelector - but I'm having a really hard time finding any documentation on that.

Upvotes: 2

Views: 7537

Answers (1)

SushiHangover
SushiHangover

Reputation: 74174

There is a ZXing sample app that shows how to embed the ZXingScannerView and ZXingDefaultOverlay into a Xamarin.Form's Grid:

https://github.com/Redth/ZXing.Net.Mobile/blob/master/Samples/Forms/Core/CustomScanPage.cs

public CustomScanPage () : base ()
{
    zxing = new ZXingScannerView
    {
        HorizontalOptions = LayoutOptions.FillAndExpand,
        VerticalOptions = LayoutOptions.FillAndExpand,
        AutomationId = "zxingScannerView",
    };
    zxing.OnScanResult += (result) => 
        Device.BeginInvokeOnMainThread (async () => {

            // Stop analysis until we navigate away so we don't keep reading barcodes
            zxing.IsAnalyzing = false;

            // Show an alert
            await DisplayAlert ("Scanned Barcode", result.Text, "OK");

            // Navigate away
            await Navigation.PopAsync ();
        });

    overlay = new ZXingDefaultOverlay
    {
        TopText = "Hold your phone up to the barcode",
        BottomText = "Scanning will happen automatically",
        ShowFlashButton = zxing.HasTorch,
        AutomationId = "zxingDefaultOverlay",
    };
    overlay.FlashButtonClicked += (sender, e) => {
        zxing.IsTorchOn = !zxing.IsTorchOn;
    };
    var grid = new Grid
    {
        VerticalOptions = LayoutOptions.FillAndExpand,
        HorizontalOptions = LayoutOptions.FillAndExpand,
    };
    grid.Children.Add(zxing);
    grid.Children.Add(overlay);

    // The root page of your application
    Content = grid;
}

Upvotes: 3

Related Questions