在 UWP 中使用 ZXing.Net.Mobile 生成图像源
Generate Imagesource with ZXing.Net.Mobile in UWP
问题
我正在尝试使用 ZXing.Net.Mobile 在 UWP 项目中创建条形码图像。
我找到了this approach。
但是在 var wb = result.ToBitmap() as WriteableBitmap;
行中,我得到的结果是 byte[],它没有方法 ToBitmap()
。
然后我找到了这个简单的代码
var writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
var wb = writer.Write("12345678");
BarcodeImg.Source = wb;
但是最后一个车道抛出错误byte[] cannot be converted to ImageSource
我天真的以为"Ok that should be easy"。哈!我到处寻找类似 this answer.
的东西
BitmapImage
没有方法 BeginInit
和 EndInit
.
问题
如何将 byte[] 转换为 ImageSource 或使用 ZXing 创建一个?
我卡住了,我又不熟悉 UPW。我会感谢每一个提示。
更新
好的,现在情况是这样的
private async void updateBarcodeImg(string code) {
var writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
var wb = writer.Write(code) as Byte[];
try {
BarcodeImg.Source = await ImageFromBytes(wb);
} catch (Exception e) {
Debug.WriteLine(e.Message);
}
}
public async static Task<BitmapImage> ImageFromBytes(Byte[] bytes) {
BitmapImage image = new BitmapImage();
using (IRandomAccessStream stream = bytes.AsBuffer().AsStream().AsRandomAccessStream()) {
stream.Seek(0);
await image.SetSourceAsync(stream);
}
return image;
}
更新
并且在行 await image.SetSourceAsync(stream);
中抛出异常 "Exception from HRESULT: 0x88982F50"。 Google 说这是因为流没有设置到位置 0。但是我早了一行。
根据您的问题,您将使用ZXing.Net.Mobile to create barcode image. However the sample you've found is using ZXing.Net。它们不是同一个库。
要使用ZXing.Net.Mobile,我们需要安装ZXing.Net.Mobile from NuGet:
Install-Package ZXing.Net.Mobile
然后使用以下代码:
var writer = new ZXing.Mobile.BarcodeWriter
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new ZXing.Common.EncodingOptions
{
Height = 300,
Width = 300
},
Renderer = new ZXing.Mobile.WriteableBitmapRenderer() { Foreground = Windows.UI.Colors.Black }
};
var writeableBitmap = writer.Write("https://developer.microsoft.com/en-us/windows/windows-apps");
QrCodeImg.Source = writeableBitmap;
我们也可以通过安装ZXing.Net from NuGet:
来使用ZXing.Net
Install-Package ZXing.Net
并使用示例中的代码:
ZXing.IBarcodeWriter writer = new ZXing.BarcodeWriter
{
Format = ZXing.BarcodeFormat.QR_CODE,//Mentioning type of bar code generation
Options = new ZXing.Common.EncodingOptions
{
Height = 300,
Width = 300
},
Renderer = new ZXing.Rendering.PixelDataRenderer() { Foreground = Windows.UI.Colors.Black }//Adding color QR code
};
var result = writer.Write("http://www.bsubramanyamraju.blogspot.com ");
var wb = result.ToBitmap() as Windows.UI.Xaml.Media.Imaging.WriteableBitmap;
//Displaying QRCode Image
QrCodeImg.Source = wb;
请注意,我们不能在同时使用这两个库。请确保您使用的代码与您选择的库匹配。
问题
我正在尝试使用 ZXing.Net.Mobile 在 UWP 项目中创建条形码图像。 我找到了this approach。
但是在 var wb = result.ToBitmap() as WriteableBitmap;
行中,我得到的结果是 byte[],它没有方法 ToBitmap()
。
然后我找到了这个简单的代码
var writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
var wb = writer.Write("12345678");
BarcodeImg.Source = wb;
但是最后一个车道抛出错误byte[] cannot be converted to ImageSource
我天真的以为"Ok that should be easy"。哈!我到处寻找类似 this answer.
的东西BitmapImage
没有方法 BeginInit
和 EndInit
.
问题
如何将 byte[] 转换为 ImageSource 或使用 ZXing 创建一个?
我卡住了,我又不熟悉 UPW。我会感谢每一个提示。
更新
好的,现在情况是这样的
private async void updateBarcodeImg(string code) {
var writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
var wb = writer.Write(code) as Byte[];
try {
BarcodeImg.Source = await ImageFromBytes(wb);
} catch (Exception e) {
Debug.WriteLine(e.Message);
}
}
public async static Task<BitmapImage> ImageFromBytes(Byte[] bytes) {
BitmapImage image = new BitmapImage();
using (IRandomAccessStream stream = bytes.AsBuffer().AsStream().AsRandomAccessStream()) {
stream.Seek(0);
await image.SetSourceAsync(stream);
}
return image;
}
更新
并且在行 await image.SetSourceAsync(stream);
中抛出异常 "Exception from HRESULT: 0x88982F50"。 Google 说这是因为流没有设置到位置 0。但是我早了一行。
根据您的问题,您将使用ZXing.Net.Mobile to create barcode image. However the sample you've found is using ZXing.Net。它们不是同一个库。
要使用ZXing.Net.Mobile,我们需要安装ZXing.Net.Mobile from NuGet:
Install-Package ZXing.Net.Mobile
然后使用以下代码:
var writer = new ZXing.Mobile.BarcodeWriter
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new ZXing.Common.EncodingOptions
{
Height = 300,
Width = 300
},
Renderer = new ZXing.Mobile.WriteableBitmapRenderer() { Foreground = Windows.UI.Colors.Black }
};
var writeableBitmap = writer.Write("https://developer.microsoft.com/en-us/windows/windows-apps");
QrCodeImg.Source = writeableBitmap;
我们也可以通过安装ZXing.Net from NuGet:
来使用ZXing.NetInstall-Package ZXing.Net
并使用示例中的代码:
ZXing.IBarcodeWriter writer = new ZXing.BarcodeWriter
{
Format = ZXing.BarcodeFormat.QR_CODE,//Mentioning type of bar code generation
Options = new ZXing.Common.EncodingOptions
{
Height = 300,
Width = 300
},
Renderer = new ZXing.Rendering.PixelDataRenderer() { Foreground = Windows.UI.Colors.Black }//Adding color QR code
};
var result = writer.Write("http://www.bsubramanyamraju.blogspot.com ");
var wb = result.ToBitmap() as Windows.UI.Xaml.Media.Imaging.WriteableBitmap;
//Displaying QRCode Image
QrCodeImg.Source = wb;
请注意,我们不能在同时使用这两个库。请确保您使用的代码与您选择的库匹配。