Сейчас я создаю свой QR-код, используя QrCoder из Asp. Net. Вы можете увидеть мой код ниже:
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
. Результат - скриншот выше (qr код справа).
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
. Но это не совсем чистый способ решить проблему, потому что шум становится очень маленьким (так что его уже почти не видно), а количество пикселей на модуль увеличивается.
Моя проблема: Я использую метод декодирования для qr-кодов, штрих-кодов и изображений. Так что, если бы я добавил изображение, оно было бы черно-белым. Конечно, я могу использовать оператор if и проверить, что если это изображение, или qr / штрих-код. Но почему PixelFormats.Gray8
создает шум? Почему это не чисто?