于是我尝试了一下,修改了不同的ECL,对应输出的图案都是不同的,但还是没有生成我想要的图案。难道是我的陈年OnBarcode类库跟不上时代了?于是我换成了QRCoder,又是一通折腾,还是没对上。再是找了一些在线生成二维码网站(见下方链接),逐个比较,发现还真是五花八门,有些是不提供设置直接生成,有些是可修改版本及ECL的,最后结果都不太一样,幸好有些网站生成的图片是对上了的,总算有条退路。
static void ParseQRCode(string imagePath, out string data, out IDictionary<ResultMetadataType, object> hints) { hints = null; BarcodeReader reader = new BarcodeReader(); reader.Options.PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE };//可加可不加 Bitmap bitmap = new Bitmap(imagePath); Result result = reader.Decode(bitmap); if (result != null) { data = result.Text; hints = result.ResultMetadata; } else { data = null; } }输入图片路径,找了一下result的属性,果然在ResultMetadata里面存放着我要的信息:
public static Bitmap CreateQRCode(string data) { Bitmap bitmap = null; GC.Collect(); BarcodeWriter barCodeWriter = new BarcodeWriter(); barCodeWriter.Format = BarcodeFormat.QR_CODE; // 生成码的方式(这里设置的是二维码),有条形码\二维码\还有中间嵌入图片的二维码等 //barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");// 支持中文字符串 barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H); barCodeWriter.Options.Hints.Add(EncodeHintType.QR_MASK_PATTERN, 2); barCodeWriter.Options.Height = 200; barCodeWriter.Options.Width = 200; barCodeWriter.Options.Margin = 0; //设置的白边大小 ZXing.Common.BitMatrix bm = barCodeWriter.Encode(data); bitmap = barCodeWriter.Write(bm); return bitmap; }果然,结果跟原图一样(外面的圈是我自己加的):