QrCoder Asp.Net - 如何消除噪音?
QrCoder Asp.Net - How to remove noise?
现在我正在使用来自 Asp.Net 的 QrCoder 创建我的 QR 码。你可以在下面看到我的代码:
SvgQrCode:
public void UpdateText(string value)
{
using (var qrGenerator = new QRCodeGenerator())
{
using (var qrCodeData = qrGenerator.CreateQrCode(value, QRCodeGenerator.ECCLevel.Q))
{
using (var qrCode = new QRCode(qrCodeData))
{
using (var bitmap = qrCode.GetGraphic(1, Color.Black, Color.White, false))
{
Image.FromData(bitmap);
}
Text = value;
} } } }
Xml:
<Image Source="{Binding Element.ImageSource}"
RenderOptions.BitmapScalingMode="NearestNeighbor"
RenderOptions.EdgeMode="Aliased"
Width="{Binding Element.Width}"
Height="{Binding Element.Height}"
Stretch="Uniform">
发生了什么:
生成的 QR 码有一些轻微的噪音,您可以在左侧的屏幕截图中看到这里(左侧 Gray8,右侧 BlackWhite):
我试过的:
我在方法 Decode
中将 Pixelformats
从 Gray8
更改为 BlackWhite
。结果就是上面的截图(右边二维码)
internal static BitmapSource Decode(string value, int? pixelWidth, BitmapCacheOption cacheOption = BitmapCacheOption.OnLoad)
{
// ..some code..
var grey = new FormatConvertedBitmap(bitmap, PixelFormats.Gray8, BitmapPalettes.Gray256, 1.0);
return grey;
}
我尝试的另一件事是将 qrCode.GetGraphic(1)
更改为更高的值,例如 qrCode.GetGraphic(10)
,这会增加 pixels per module
。但这不是解决问题的干净方法,因为噪音变得非常小(所以你几乎看不到它了)并且每个模块的像素都在增加。
我的问题: 我对二维码、条形码和图像使用解码方法。所以如果我要添加图像,它将是黑白的。当然,我可以使用 if 语句并检查它是否是图像或 qr/bar-code。但为什么 PixelFormats.Gray8
会产生噪音?为什么不干净?
我发现了问题。我忽略了这些行,没有意识到 .jpeg 被选为格式:
public void FromData(Bitmap bitmap)
{
using (var ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Jpeg);
//...
现在我正在使用来自 Asp.Net 的 QrCoder 创建我的 QR 码。你可以在下面看到我的代码:
SvgQrCode:
public void UpdateText(string value)
{
using (var qrGenerator = new QRCodeGenerator())
{
using (var qrCodeData = qrGenerator.CreateQrCode(value, QRCodeGenerator.ECCLevel.Q))
{
using (var qrCode = new QRCode(qrCodeData))
{
using (var bitmap = qrCode.GetGraphic(1, Color.Black, Color.White, false))
{
Image.FromData(bitmap);
}
Text = value;
} } } }
Xml:
<Image Source="{Binding Element.ImageSource}"
RenderOptions.BitmapScalingMode="NearestNeighbor"
RenderOptions.EdgeMode="Aliased"
Width="{Binding Element.Width}"
Height="{Binding Element.Height}"
Stretch="Uniform">
发生了什么:
生成的 QR 码有一些轻微的噪音,您可以在左侧的屏幕截图中看到这里(左侧 Gray8,右侧 BlackWhite):
我试过的:
我在方法 Decode
中将 Pixelformats
从 Gray8
更改为 BlackWhite
。结果就是上面的截图(右边二维码)
internal static BitmapSource Decode(string value, int? pixelWidth, BitmapCacheOption cacheOption = BitmapCacheOption.OnLoad)
{
// ..some code..
var grey = new FormatConvertedBitmap(bitmap, PixelFormats.Gray8, BitmapPalettes.Gray256, 1.0);
return grey;
}
我尝试的另一件事是将 qrCode.GetGraphic(1)
更改为更高的值,例如 qrCode.GetGraphic(10)
,这会增加 pixels per module
。但这不是解决问题的干净方法,因为噪音变得非常小(所以你几乎看不到它了)并且每个模块的像素都在增加。
我的问题: 我对二维码、条形码和图像使用解码方法。所以如果我要添加图像,它将是黑白的。当然,我可以使用 if 语句并检查它是否是图像或 qr/bar-code。但为什么 PixelFormats.Gray8
会产生噪音?为什么不干净?
我发现了问题。我忽略了这些行,没有意识到 .jpeg 被选为格式:
public void FromData(Bitmap bitmap)
{
using (var ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Jpeg);
//...