尝试将其保存为PNG流,但显示“表达式已被评估且没有无效值”

时间:2018-08-10 09:26:19

标签: c# image lambda stream .net-core

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

感谢您的帮助。预先感谢

   ` 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`

1 个答案:

答案 0 :(得分:0)

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

  • CoreCompat.System.Drawing
  • ZXing.Net

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

  • “ 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())
        }
    }