//old method // public UIImage GetQRCodeImageByString(string sourceStr,QRCodeCorrectionLevel level = QRCodeCorrectionLevel.H) // { // CIQRCodeGenerator qrGen = new CIQRCodeGenerator (); // qrGen.Message = NSData.FromString (sourceStr); // qrGen.CorrectionLevel = level.ToString(); // // var output = new CILanczosScaleTransform { // Image = qrGen.OutputImage, // Scale = 1 // }.OutputImage; // // var context = CIContext.FromOptions(null); // UIImage img = UIImage.FromImage (context.CreateCGImage (output, output.Extent)); // Console.WriteLine ("output.Extent.Size="+output.Extent.Size); // Console.WriteLine ("img.Size="+img.Size); // return img; // } public UIImage GetQRCodeImageByString(string sourceStr, nfloat length, QRCodeCorrectionLevel level = QRCodeCorrectionLevel.M) { NSString nsStr = new NSString(sourceStr); CIImage ciImage = CreateQRForString(nsStr, level); return(CreateNonInterpolatedUIImageFormCIImage(ciImage, length)); }
CIImage CreateQRForString(NSString qrString, QRCodeCorrectionLevel level) { NSData strData = qrString.Encode(NSStringEncoding.UTF8); // 创建filter CIFilter qrFilter = CIFilter.FromName("CIQRCodeGenerator"); // 设置内容和纠错级别 qrFilter.SetValueForKey(strData, new NSString("inputMessage")); qrFilter.SetValueForKey(new NSString(level.ToString()), new NSString("inputCorrectionLevel")); // 返回CIImage return(qrFilter.OutputImage); }