用Xamarin表单实现QR码生成器的问题

本文关键字:问题 Xamarin 表单 实现 QR | 更新日期: 2023-09-27 18:14:26

我在Xamarin Forms中实现ZXing.Net.Mobile (Android)时遇到了一些麻烦。我有以下类在我的Android项目实现IBarcodeWriter接口(这是在我的共享项目)。应用程序没有抛出任何错误,但是当添加到带有DependencyService.Get<IBarcodeWriter> ().GetImage()

的stacklayout中时,它没有显示图像。

这是我的Droid项目中的类:

namespace SmartCart {
public class BarcodeGenerator : IBarcodeWriter
{
    public BarcodeGenerator () {}
    public Image image = new Image();
    public byte[] bitmapBytes;
    public String qrData (String s) {
        return s;
    }
    public void CreateBarcode () {
        image.Source = ImageSource.FromStream(() => 
            {
                var writer = new BarcodeWriter 
                {
                    Format = BarcodeFormat.QR_CODE,
                    Options = new EncodingOptions 
                    {
                        Height = 200,
                        Width = 600
                    }
                };
                var bitmapBytes = writer.Write ("Encode this to QRCode");
                MemoryStream ms = new MemoryStream(bitmapBytes);
                ms.Position = 0;
                return ms;
            });
    }
    public Image GetImage() {
        return image;
    }
}

用Xamarin表单实现QR码生成器的问题

我们使用以下方法生成QR-Code。(看看bitmap.Compress行,也许可以解决你的问题):

public byte[] GenerateQrImage(string content, int width, int height)
{
    var options = new QrCodeEncodingOptions
    {
        Height = height,
        Width = width,
        Margin = 0,
        PureBarcode = true
    };
    var writer = new BarcodeWriter
    {
        Format = BarcodeFormat.QR_CODE,
        Options = options
    };
    // Generate bitmap
    var bitmap = writer.Write(content);
    if (bitmap != null)
    {
        // Get bytes from bitmap
        using (var stream = new MemoryStream())
        {
            bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
            return stream.ToArray();
        }
    }
    return null;
}

Edit:事实证明,问题可能是一个错误的nuget包。使用此包生成qr-code