ZXing.Net.Mobile视图不适用于Xamarin.Forms中的UWP

ZXing.Net.Mobile视图不适用于Xamarin.Forms中的UWP,xamarin,uwp,xamarin.forms,zxing,Xamarin,Uwp,Xamarin.forms,Zxing,我在Xamarin.Forms应用程序中使用ZXingScannerView。我用Android API 21+和Windows Mobile 10测试它。虽然在Android中,摄像头流可以完美地扩展到扫描仪视图的边界,但对于UWP来说,情况并非如此。无论模拟器的大小或分辨率如何。我也尝试过使用真正的windows phone设备,但问题仍然存在 我将ZXingScannerView放置在类似以下内容页中: <ContentPage.Content> <StackLa

我在Xamarin.Forms应用程序中使用ZXingScannerView。我用Android API 21+和Windows Mobile 10测试它。虽然在Android中,摄像头流可以完美地扩展到扫描仪视图的边界,但对于UWP来说,情况并非如此。无论模拟器的大小或分辨率如何。我也尝试过使用真正的windows phone设备,但问题仍然存在

我将ZXingScannerView放置在类似以下内容页中:

<ContentPage.Content>
    <StackLayout Spacing="20" Padding="15">
        ...
        <Grid
            HorizontalOptions="FillAndExpand"
            VerticalOptions="FillAndExpand">
            <zxing:ZXingScannerView
                x:Name="zxing"
                Result="{Binding ScannerResult, Mode=TwoWay}"
                IsScanning="{Binding ScannerScanning}"
                IsVisible="{Binding ScannerVisible}"
                IsAnalyzing="{Binding ScannerAnalyzing}"
                ScanResultCommand="{Binding ScannedCommand}"/>
            <v:MainPageZXingOverlayView />
        </Grid>
        ...
    </StackLayout>
</ContentPage.Content>
有人遇到同样的问题或有解决方法吗

在安卓系统中,摄像头流可以完美地扩展到扫描仪视图的边界,但对于UWP来说,情况并非如此。无论模拟器的大小或分辨率如何。我也尝试过使用真正的windows phone设备,但问题仍然存在

预览分辨率是根据相机开始扫描时的相机分辨率设置的

根据需要,可以通过自定义相机分辨率将预览扩展到边界。请参阅以下代码:

private async void Button_Clicked(object sender, EventArgs e)
{                
    var options = new ZXing.Mobile.MobileBarcodeScanningOptions
    {
        CameraResolutionSelector = HandleCameraResolutionSelectorDelegate
    };
    var scanner = new ZXing.Mobile.MobileBarcodeScanner();
    scanner.AutoFocus();
    var result = await scanner.Scan(options);
    if (result != null)
        System.Diagnostics.Debug.WriteLine("Scanned Barcode: " + result.Text);
}
CameraResolution HandleCameraResolutionSelectorDelegate(List<CameraResolution> availableResolutions)
{
    //Don't know if this will ever be null or empty
    if (availableResolutions == null || availableResolutions.Count < 1)
        return new CameraResolution() { Width = 800, Height = 600 };

    //Debugging revealed that the last element in the list
    //expresses the highest resolution. This could probably be more thorough.
    return availableResolutions[availableResolutions.Count - 1];
}

谢谢你的提示。我试过你的建议,但没有成功。在同一个源文件中,我看到:
capturelement.Stretch=Stretch.UniformToFill
这是我认为UWP中不受尊重的东西,尽管我不知道为什么。当我使用600*800的相机分辨率时,它在我这边起作用。请注意,我使用的是
ZXingScannerView
本身,但不是内置包装器。我已经更新了我的问题,使之更加清晰。谢谢,我已经尝试过你的解决方案,修改代码以适应我的场景,但它不适合我。使用具有适当高宽比的自定义分辨率可以使事情变得更好,但不能解决我的问题。此外,我只能选择可用分辨率的形式,在我的情况下,根据调试器,我有一个有限的数字(只有3个)。强制自定义分辨率(如600*800)会引发异常。我的痛苦是为什么在设置
和captureElement.Stretch=Stretch.UniformToFill
(ZXingScannerControl.xaml/.cs)它不尊重这一点。此设置
和captureElement.Stretch=Stretch.UniformToFill/>
效果良好。但是,相机steam的渲染无法以原始分辨率填充
CaptureElement
// *after* the preview is setup, set this so that the UI layout happens
// otherwise the preview gets stuck in a funny place on screen
captureElement.Stretch = Stretch.UniformToFill;
private async void Button_Clicked(object sender, EventArgs e)
{                
    var options = new ZXing.Mobile.MobileBarcodeScanningOptions
    {
        CameraResolutionSelector = HandleCameraResolutionSelectorDelegate
    };
    var scanner = new ZXing.Mobile.MobileBarcodeScanner();
    scanner.AutoFocus();
    var result = await scanner.Scan(options);
    if (result != null)
        System.Diagnostics.Debug.WriteLine("Scanned Barcode: " + result.Text);
}
CameraResolution HandleCameraResolutionSelectorDelegate(List<CameraResolution> availableResolutions)
{
    //Don't know if this will ever be null or empty
    if (availableResolutions == null || availableResolutions.Count < 1)
        return new CameraResolution() { Width = 800, Height = 600 };

    //Debugging revealed that the last element in the list
    //expresses the highest resolution. This could probably be more thorough.
    return availableResolutions[availableResolutions.Count - 1];
}
public MainPage()
{
    InitializeComponent();
    var options = new ZXing.Mobile.MobileBarcodeScanningOptions
    {
        CameraResolutionSelector = HandleCameraResolutionSelectorDelegate
    };
    zxing.Options = options;
}
CameraResolution HandleCameraResolutionSelectorDelegate(List<CameraResolution> availableResolutions)
{
    //Don't know if this will ever be null or empty
    if (availableResolutions == null || availableResolutions.Count < 1)
        return new CameraResolution() { Width = 800, Height = 600 };

    //Debugging revealed that the last element in the list
    //expresses the highest resolution. This could probably be more thorough.
    return availableResolutions[availableResolutions.Count - 1];
}