0

xaml C# を使用して Windows 8 アプリケーションで QR コード/バーコードを読み取りたいのですが、ポインタはありますか?

ZXing.Netを使用してこれを試しました

    var openPicker = new FileOpenPicker { ViewMode = PickerViewMode.Thumbnail, SuggestedStartLocation = PickerLocationId.PicturesLibrary };
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");
    openPicker.FileTypeFilter.Add(".png");

    StorageFile file = await openPicker.PickSingleFileAsync();
    if (file != null)
    {
        // Application now has read/write access to the picked file

        BitmapImage bmp = new BitmapImage();
        IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
        bmp.SetSource(stream);
        BarCodeImage.Source = bmp;

        IBarcodeReader reader = new BarcodeReader();
        WriteableBitmap barcodeBitmap = new WriteableBitmap(1,1);
        barcodeBitmap.SetSource(stream);
        var result = reader.Decode(barcodeBitmap);
    }

しかし、結果をロードしているときに、「値をnullにすることはできません」という例外が発生します。そのためのコードを教えてください

4

1 に答える 1

2

私は最終的に解決策を得ました。将来的に他の人に役立つことを願っています

    private async void DecodeStaticResource(StorageFile file)
    {
        var stream = await file.OpenReadAsync();

        // initialize with 1,1 to get the current size of the image
        var writeableBmp = new WriteableBitmap(1, 1);
        writeableBmp.SetSource(stream);


        // and create it again because otherwise the WB isn't fully initialized and decoding
        // results in a IndexOutOfRange
        writeableBmp = new WriteableBitmap(writeableBmp.PixelWidth, writeableBmp.PixelHeight);
        stream.Seek(0);
        writeableBmp.SetSource(stream);

        var result = ScanBitmap(writeableBmp);
        if (result != null)
        {
            ScanResult.Text += result.Text;
        }
    }

    private Result ScanBitmap(WriteableBitmap writeableBmp)
    {
        var barcodeReader = new BarcodeReader
        {
            TryHarder = true,
            AutoRotate = true
        };
        var result = barcodeReader.Decode(writeableBmp);

        if (result != null)
        {
            CaptureImage.Source = writeableBmp;
        }

        return result;
    }
于 2013-05-09T20:58:17.583 に答える