我正在尝试在.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`
答案 0 :(得分:0)
注意:需要两个依赖项,可以从Nuget软件包管理器将它们作为nuget软件包安装:
我收到错误消息是因为我错过了这一行
“ 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())
}
}