Zxing.net解码在扫描Windows手机商店应用程序上返回null

时间:2014-12-07 01:54:30

标签: windows-store-apps windows-phone-8.1 zxing

我有以下代码,用于从相机捕获流图像。

以下是设置相机的代码,我在其中初始化它,设置最大分辨率,禁用闪光灯,旋转视图,设置镜像并开始预览。

_mediaCapture = new MediaCapture();
await _mediaCapture.InitializeAsync(settings);

var maxResolution =
    _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo)
        .Aggregate(
            (i1, i2) =>
                (i1 as VideoEncodingProperties).Width > (i2 as VideoEncodingProperties).Width ? i1 : i2);
await _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, maxResolution);

_mediaCapture.VideoDeviceController.FlashControl.AssistantLightEnabled = false;
_mediaCapture.VideoDeviceController.TorchControl.Enabled = false;
_mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
_mediaCapture.SetPreviewMirroring(true);
_mediaCapture.VideoDeviceController.PrimaryUse = CaptureUse.Photo;

VideoCapture.Source = _mediaCapture;
await _mediaCapture.StartPreviewAsync();

计时器运行后,以下代码用于捕获stream中的照片:

var stream = new InMemoryRandomAccessStream();

await _mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJpeg(), stream);

using (stream)
{
    var writeableBmp = new WriteableBitmap(1, 1);
    stream.Seek(0);
    await writeableBmp.SetSourceAsync(stream);
    writeableBmp = new WriteableBitmap(writeableBmp.PixelWidth, writeableBmp.PixelHeight);
    stream.Seek(0);
    await writeableBmp.SetSourceAsync(stream);
    _result = ScanBitmap(writeableBmp);
}

将可写位图对象传递给条形码扫描功能Decode

private Result ScanBitmap(WriteableBitmap writeableBmp)
{
    var barcodeReader = new BarcodeReader
    {
        AutoRotate = true,
        TryInverted = true,
        Options =
        {
            PureBarcode = false,
            TryHarder = true,
            PossibleFormats = new[]
            {
                BarcodeFormat.QR_CODE,
                BarcodeFormat.EAN_13
            }
        },
    };

    var result = barcodeReader.Decode(writeableBmp);
    return result;
}

我已经使用了几个选项,因为它们可以在上面看到,但扫描不成功。 Decode函数始终返回null。我还尝试了ResultFound的{​​{1}}事件,但仍然是相同的。

这里有什么不对吗?

1 个答案:

答案 0 :(得分:0)

我意识到这是一个老帖子,但我有同样的问题,这可能会节省一些人一些时间。对我而言,这与焦点有关。在某些手机上,根据以下链接,驱动程序出现故障:

  

known issues with Nokia drivers和新的MediaCapture API,   为described here。 Microsoft正在与诺基亚(或他们的设备)合作   部门)解决这个问题。我工作的唯一解决方案   运行时应用程序是使用手动对焦。所有其他尝试都给了我一个   另一个例外,无论是取消预览还是打开预览   在预览时。

无论如何,该链接提供了一个使用滑块来控制焦点的解决方案!