我正在尝试使用 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/