首页 > 解决方案 > 尝试以 PNG 格式保存到流中我得到“表达式已被评估并且没有值无效”

问题描述

我正在尝试在 .net core 2.0 中创建 API 以将字符串转换为 base64 图像 Qrcode,如下所示。我目前在我的项目中使用“ZXing.net”和“CoreCompat.System.Drawing”块包。当我尝试将流保存为 PNG
即“bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 我得到表达式已被评估并且没有值无效”

我会感谢你的帮助。提前致谢

   ` var ss = "123longstringtoencodedhhhh34444hhh123";
        var qr = new ZXing.BarcodeWriterPixelData
        {
            Format = ZXing.BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions { Height = 250, Width = 250, Margin = 0 }
        };

        var pixelData = qr.Write(ss);
        using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
        using (var ms = new MemoryStream())
        {
            var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height),
                System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            try
            {
                // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0,
                    pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
            }


            // trying to save to stream as PNG

            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        }

错误 bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 表达式已被评估并且没有值 void`

标签: c#imagelambdastream.net-core

解决方案


注意:需要两个依赖项,可以从 Nuget 包管理器作为 nuget 包安装:

  • CoreCompat.System.Drawing
  • 中兴网

我收到了错误消息,因为我错过了这一行

  • “var pixelData = qr.Write(Encoding.Default.GetString(ss));”

    var ss = "123longstringtoencodedhhhh34444hhh123";

请参阅下面的完整代码

        var qr = new ZXing.BarcodeWriterPixelData()
        {
            Format = ZXing.BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions { Height = 250, Width = 250, Margin = 0 }
        };

        var pixelData = qr.Write(Encoding.Default.GetString(ss));

        using (var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))


        using (var ms = new MemoryStream())
        {
            var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height),
                System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            try
            {
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
            }

            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

           return Convert.ToBase64String(ms.ToArray())
        }
    }

推荐阅读