在 UWP 中使用 ZXing.Net.Mobile 生成图像源

Generate Imagesource with ZXing.Net.Mobile in UWP

问题

我正在尝试使用 ZXing.Net.Mobile 在 UWP 项目中创建条形码图像。 我找到了this approach

但是在 var wb = result.ToBitmap() as WriteableBitmap; 行中,我得到的结果是 byte[],它没有方法 ToBitmap()

然后我找到了这个简单的代码

var writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
var wb = writer.Write("12345678");
BarcodeImg.Source = wb;

但是最后一个车道抛出错误byte[] cannot be converted to ImageSource

我天真的以为"Ok that should be easy"。哈!我到处寻找类似 this answer.

的东西

BitmapImage 没有方法 BeginInitEndInit.

问题

如何将 byte[] 转换为 ImageSource 或使用 ZXing 创建一个?

我卡住了,我又不熟悉 UPW。我会感谢每一个提示。

更新

好的,现在情况是这样的

private async void updateBarcodeImg(string code) {
    var writer = new BarcodeWriter();
    writer.Format = BarcodeFormat.QR_CODE;
    var wb = writer.Write(code) as Byte[];
    try {
        BarcodeImg.Source = await ImageFromBytes(wb);
    } catch (Exception e) {
        Debug.WriteLine(e.Message);
    }
}

public async static Task<BitmapImage> ImageFromBytes(Byte[] bytes) {
    BitmapImage image = new BitmapImage();
    using (IRandomAccessStream stream = bytes.AsBuffer().AsStream().AsRandomAccessStream()) {
        stream.Seek(0);
        await image.SetSourceAsync(stream);
    }
    return image;
}

更新

并且在行 await image.SetSourceAsync(stream); 中抛出异常 "Exception from HRESULT: 0x88982F50"。 Google 说这是因为流没有设置到位置 0。但是我早了一行。

根据您的问题,您将使用ZXing.Net.Mobile to create barcode image. However the sample you've found is using ZXing.Net。它们不是同一个库。

要使用ZXing.Net.Mobile,我们需要安装ZXing.Net.Mobile from NuGet:

Install-Package ZXing.Net.Mobile

然后使用以下代码:

var writer = new ZXing.Mobile.BarcodeWriter
{
    Format = ZXing.BarcodeFormat.QR_CODE,
    Options = new ZXing.Common.EncodingOptions
    {
        Height = 300,
        Width = 300
    },
    Renderer = new ZXing.Mobile.WriteableBitmapRenderer() { Foreground = Windows.UI.Colors.Black }
};
var writeableBitmap = writer.Write("https://developer.microsoft.com/en-us/windows/windows-apps");

QrCodeImg.Source = writeableBitmap;

我们也可以通过安装ZXing.Net from NuGet:

来使用ZXing.Net
Install-Package ZXing.Net

并使用示例中的代码:

ZXing.IBarcodeWriter writer = new ZXing.BarcodeWriter
{
    Format = ZXing.BarcodeFormat.QR_CODE,//Mentioning type of bar code generation
    Options = new ZXing.Common.EncodingOptions
    {
        Height = 300,
        Width = 300
    },
    Renderer = new ZXing.Rendering.PixelDataRenderer() { Foreground = Windows.UI.Colors.Black }//Adding color QR code
};
var result = writer.Write("http://www.bsubramanyamraju.blogspot.com ");
var wb = result.ToBitmap() as Windows.UI.Xaml.Media.Imaging.WriteableBitmap;
//Displaying QRCode Image
QrCodeImg.Source = wb;

请注意,我们不能同时使用这两个库。请确保您使用的代码与您选择的库匹配。