Есть ли способ с ZXing. net, чтобы получить целочисленный или логический массив? - PullRequest
0 голосов
/ 19 января 2020

Я хочу генерировать QR-коды (или DM-коды) в моем CAM-программном обеспечении. Для этой задачи мне не нужно растровое изображение, а координаты, такие как двумерный целочисленный массив.

Пример того, что я имею в виду:

An example of what I mean

Я пробовал ZXing. net, но я мог создавать только растровые изображения. Есть ли способ с ZXing. net, чтобы получить целочисленный или логический массив? Или существует другая библиотека, которая может кодировать так?

1 Ответ

0 голосов
/ 19 января 2020

Вот три способа получить BitMatrix или двумерный массив int вместо растрового изображения. На мой взгляд, второй является лучшим. Но это зависит от ваших потребностей.

    // first way to get a BitMatrix instead of a bitmap
    var writer1 = new ZXing.QrCode.QRCodeWriter();
    var bitmatrix = writer1.encode(
        "<content>",
        BarcodeFormat.QR_CODE,
        1,
        1,
        new System.Collections.Generic.Dictionary<EncodeHintType, object>());

    // second way to get a BitMatrix instead of a bitmap
    var writer2 = new ZXing.BarcodeWriter<BitMatrix>
    {
        Format = BarcodeFormat.QR_CODE,
        Renderer = new BitMatrixRenderer()
    };
    var bitmatrix2 = writer2.Write("content");

    // third way to get a 2D int array instead of a bitmap
    var writer3 = new ZXing.BarcodeWriter<int[,]>
    {
        Format = BarcodeFormat.QR_CODE,
        Renderer = new BitArray2DRenderer()
    };
    var bitarray2D = writer3.Write("content");

    public class BitMatrixRenderer : IBarcodeRenderer<BitMatrix>
    {
        public BitMatrix Render(BitMatrix matrix, BarcodeFormat format, string content)
        {
            return matrix;
        }

        public BitMatrix Render(BitMatrix matrix, BarcodeFormat format, string content, EncodingOptions options)
        {
            return matrix;
        }
    }

    public class BitArray2DRenderer : IBarcodeRenderer<int[,]>
    {
        public int[,] Render(BitMatrix matrix, BarcodeFormat format, string content)
        {
            return Render(matrix, format, content, null);
        }

        public int[,] Render(BitMatrix matrix, BarcodeFormat format, string content, EncodingOptions options)
        {
            var result = new int[matrix.Width, matrix.Height];
            for (var y = 0; y < matrix.Height; y++)
            {
                for (var x = 0; x < matrix.Width; x++)
                {
                    result[x, y] = matrix[x, y] ? 1 : 0;
                }
            }

            return result;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...