0

我想将我的卡的代码号转换为 QR 图像,所以我添加了一个对我的项目的引用。然后我在 Helper Class 中创建了一种方法:

public static Image GenerateQRCode(String code)
{
  QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
  QrCode qrCode = new QrCode();
  qrEncoder.TryEncode(code, out qrCode);
  Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White);
  MemoryStream ms = new MemoryStream();
  renderer.WriteToStream(qrCode.Matrix, ms, System.Drawing.Imaging.ImageFormat.Png);
  return System.Drawing.Image.FromStream(ms);
}

然后我在我看来调用这个函数:

  <%
     System.Drawing.Image image = ICEWeb.HelperClasses.HelperClass.GenerateQRCode("test");
  %>

但它只显示System.Drawing.Bitmap,有人知道如何显示从我的函数返回的 System.Drawing.ImageGenerateQRCode()吗?

塔纳

4

1 回答 1

1

以 MVCishly 方式进行:通过编写自定义操作结果。您当前拥有的GenerateQRCode方法是您可以将其留在旧应用程序中的东西。

public class QRCodeResult : ActionResult
{
    public QRCodeResult(string code)
    {
        Code = code;
    }

    public string Code { get; private set; }

    public override void ExecuteResult(ControllerContext context)
    {
        var response = context.HttpContext.Response;
        response.ContentType = "image/png";

        QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
        QrCode qrCode = new QrCode();
        qrEncoder.TryEncode(Code, out qrCode);
        Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White);
        renderer.WriteToStream(qrCode.Matrix, response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
    }
}

然后是控制器动作:

public ActionResult QRCode(string code)
{
    return new QRCodeResult(code);
}

最后,在您想要显示 QR 码的某个视图中,使用<img>指向您编写的控制器操作的标签:

<img src="<%: Url.Action("QRCode", new { code = "test" }) %>" alt="" />
于 2012-07-18T10:05:50.563 回答