使用 Xamarin Forms 实现二维码生成器的问题
Problems Implementing a QR Code Generator with Xamarin Forms
我在 Xamarin Forms 中实现 ZXing.Net.Mobile (Android) 时遇到了一些问题。我的 Android 项目中有以下 class,它实现了 IBarcodeWriter 接口(在我的共享项目中)。该应用程序没有抛出任何错误,但在使用 DependencyService.Get<IBarcodeWriter> ().GetImage()
添加到堆栈布局中时没有显示图像
这是我的 Droid 项目中的 class:
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;
}
}
我们使用以下方法生成二维码。 (查看 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;
}
编辑: 事实证明,问题可能出在错误的 nuget 包上。使用 this package 生成二维码
我在 Xamarin Forms 中实现 ZXing.Net.Mobile (Android) 时遇到了一些问题。我的 Android 项目中有以下 class,它实现了 IBarcodeWriter 接口(在我的共享项目中)。该应用程序没有抛出任何错误,但在使用 DependencyService.Get<IBarcodeWriter> ().GetImage()
这是我的 Droid 项目中的 class:
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;
}
}
我们使用以下方法生成二维码。 (查看 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;
}
编辑: 事实证明,问题可能出在错误的 nuget 包上。使用 this package 生成二维码