使用Xamarin.Forms应用程序

时间:2015-08-23 11:14:05

标签: c# xamarin xamarin.forms

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

我很难将byte[]BarcodeWriter.Writer(...)返回到图片中进行展示。

即。这不显示图像

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"));

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

解决方法

目前,我正在转换为原生的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()));

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

1 个答案:

答案 0 :(得分:0)

我不确定是什么小部件&#34;内容&#34;在您的代码中代表,但指定您的&#34;图像&#34;作为您的ContentPage成员的表单视图的图像类应该可以解决问题。

在XAML中,您可以在ContentPage中创建一个图像,就像在表格samples中一样。

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