c# - 在 Xamarin.Forms 应用程序中使用 ZXing.Net.Mobile 呈现二维码

标签 c# xamarin xamarin.forms

我正在尝试使用 ZXing.Net.Mobile将二维码显示为图像。

我很难将 BarcodeWriter.Writer(...) 返回的 byte[] 转换成图像进行显示。

即这不显示图像

public class BarcodePage : ContentPage
{
    public BarcodePage()
    {
        Image image = new Image();

        image.Source = ImageSource.FromStream(() => 
        {
            var writer = new BarcodeWriter 
            {
                Format = BarcodeFormat.QR_CODE,
                Options = new EncodingOptions 
                {
                    Height = 200,
                    Width = 600
                }
            };

            var bitmapBytes = writer.Write ("Some text");
            return new MemoryStream(bitmapBytes);
        });

        Content = image;
    }
}

bitmapBytes 字节数组在调试器中看起来具有合理的值,我如何才能将其转换为图像进行显示?

如果我将 Image.Source 分配更改为:

image.Source = ImageSource.FromUri(new Uri("http://i.imgur.com/q0aIYvC.png"));

然后它确实正确显示图像,所以我知道问题不在于表单布局等。

解决方法

目前,我正在转换为原生的 MemoryStream,例如在 Android 中我有:

public class BuildQrCodes_Android : IBuildQrCodes
{
    public async Task<MemoryStream> ImageStreamForAsync(string text)
    {
        var writer = new BarcodeWriter 
            {
                Format = ZXing.BarcodeFormat.QR_CODE,
                Options = new EncodingOptions 
                    {
                        Height = 600,
                        Width = 600
                    }
            };

        var bitmap = writer.Write(text);

        var stream = new MemoryStream();
        await bitmap.CompressAsync(Bitmap.CompressFormat.Png, 100, stream);
        stream.Position = 0;

        return stream;
    }
}

然后在 Xamarin Forms 方面,我有

IBuildQrCodes qrBuilder = /* Service lookup */
var stream = await qrBuilder.ImageStreamForAsync("the text to encode");
return ImageSource.FromStream(() => new MemoryStream(stream.ToArray()));

这是我想要的,所以这是一个可以接受的解决方法。

最佳答案

我不确定您的代码中的“内容”小部件代表什么,但是将您的“图像”分配给作为您的 ContentPage 成员的表单 View 的图像类应该可以解决问题。

在 XAML 中,您将在您的 ContentPage 中创建一个图像,即像在一个表单的 samples 中一样.

否则,动态创建一个 Image 类小部件,通过 AddView for your ContentPage 将其添加到您的布局中.

关于c# - 在 Xamarin.Forms 应用程序中使用 ZXing.Net.Mobile 呈现二维码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166006/

相关文章:

c# - 反射 - 检查所有可为空的属性是否有值

c# - 地理位置、服务和本地通知

c# - 如何在 ios 中以编程方式打开设置

android - 在 Xamarin.Forms 中复制下拉 ToolbarItem "More"

c# - ListView Tapped 删除数据模板 Xamarin.Forms 上的按钮背景颜色

c# - 如何在网络浏览器中获取滚动条的当前垂直位置?

c# - 静态终结器

c# - 这个加密代码安全吗?

visual-studio - Xamarin IOs,从 Visual Studio for Windows 连接到 Mac Build Agent 时,私钥已加密但密码为空

ios - Xamarin iOS - 创建绑定(bind) - 对于经典、统一和形式,我是否需要不同的绑定(bind)?