VintaSoft Barcode .NET SDK 15.1: Руководство для .NET разработчика
Vintasoft.Barcode.BarcodeStructure Namespace / MatrixBarcodeStructure Class
    Класс MatrixBarcodeStructure
    В этом разделе
    Класс, хранящий структуру двумерного матричного штрих-кода (Aztec, QR Code, Micro QR, Data Matrix, Han Xin Code).
    Объектная модель
    BarcodeElement BarcodeElement BarcodeElement MatrixBarcodeStructure
    Синтаксис
    'Declaration
    
    Public Class MatrixBarcodeStructure
       Inherits BarcodeStructureBase
    
    
    public class MatrixBarcodeStructure : BarcodeStructureBase
    
    
    public __gc class MatrixBarcodeStructure : public BarcodeStructureBase*
    
    
    public ref class MatrixBarcodeStructure : public BarcodeStructureBase^
    
    
    Ремарки

    При создании штрих-кодов "дизайна" необходимо учитывать, что вы не можете изменить какой-либо элемент штрих-кода, если хотите распознать штрих-код.
    Этот класс содержит информацию об элементах штрих-кода матричного штрих-кода и предоставляет информацию о важности элементов штрих-кода. для систем распознавания.
    Информация о важности элементов штрих-кода для систем распознавания может быть использована для генерации "конструкторского" штрих-кода, который может быть распознан.

    Двумерный матричный штрих-код обычно состоит из следующих слоев:

    • Fixed structure - фиксированные ячейки (шаблоны поиска, шаблоны ориентации, шаблоны выравнивания, шаблоны синхронизации), которые не зависят от пользовательских данных (FixedStructure)
    • Format information - ячейки (версия символа, уровень исправления ошибок, маска), содержащие служебную информацию (FixedStructure)
    • Data layer - ячейки, которые содержат пользовательские данные и данные для исправления ошибок (DataLayer)

    При замене элемента штрих-кода необходимо учитывать важность элемента штрих-кода и возможность восстановления элемента штрих-кода при распознавании штрих-кода:
    • Search patterns - важные ячейки штрих-кода, которые используются для поиска штрих-кода на изображении. Штрих-код не будет распознан, если форма его ячеек сильно искажена или повреждена (IsSearchPattern(Int32,Int32)).
    • Format information - важные ячейки штрих-кода, которые содержат служебную информацию. Штрих-код не будет распознан, если форма его ячеек сильно искажена или повреждена (IsFormatInformation(Int32,Int32)).
    • Alignment patterns - некритические ячейки штрих-кода для QR Code, Micro QR, DataMatrix, Han Xin Code; критические ячейки штрих-кода для штрих-кодов Aztec. Штрих-код не будет распознан или шанс его распознания значительно уменьшится, если форма ячеек штрих-кода будет сильно искажена или повреждена (IsAlignmentPattern(Int32,Int32)) или если изображение штрих-кода имеет пространственные искажения (например, изображение было снято с камеры смартфона в низком качестве).
    • Timing patterns - некритические ячейки штрих-кода для Aztec, QR Code, Micro QR, Han Xin Code; критические ячейки штрих-кода для штрих-кодов DataMatrix. Штрих-код не будет распознан или шанс его распознания значительно уменьшится, если форма ячеек штрих-кода будет сильно искажена или повреждена (IsTimingPattern(Int32,Int32)) или если изображение штрих-кода имеет пространственные искажения (например, изображение было снято с камеры смартфона в низком качестве).
    • Data layer - ячейки штрих-кода, которые содержат пользовательские данные и информацию об исправлении ошибок (IsDataLayer(Int32,Int32)).
      Данные в этом слое можно восстановить с помощью алгоритма исправления ошибок. Уровень исправления ошибок определяет, сколько данных можно восстановить.
      Требуемый уровень исправления ошибок можно рассчитать с помощью ErrorCorrectionCodewordCount и CorrectedErrors. Уровень исправления ошибок для распознанного штрих-кода следует увеличить, если значение свойства CorrectedErrors, умноженное на 4, больше, чем значение ErrorCorrectionCodewordCount свойство. Также необходимый уровень исправления ошибок можно рассчитать с помощью класса ISO15415QualityTest.

    Пример

    Вот C#/VB.NET код, который демонстрирует, как создать QR-штрих-код в виде текстового файла (графика ASCII).

       
    ''' <summary>
    ''' Generates the QR barcode structure as text file.
    ''' </summary>
    ''' <param name="value">The barcode value.</param>
    ''' <param name="outputFilename">The output filename.</param>
    Public Shared Sub GenerateQRBarcodeStructureAsText(value As String, outputFilename As String)   
        Using writer As New Vintasoft.Barcode.BarcodeWriter()   
            writer.Settings.Barcode = Vintasoft.Barcode.BarcodeType.Aztec   
            writer.Settings.Value = value   
            Dim barcode As Vintasoft.Barcode.BarcodeStructure.MatrixBarcodeStructure = DirectCast(writer.GetBarcodeStructure(), Vintasoft.Barcode.BarcodeStructure.MatrixBarcodeStructure)   
            Dim barcodeBBox As Vintasoft.Primitives.VintasoftRectI = barcode.GetBoundingBox()   
            Dim x0 As Integer = barcodeBBox.X   
            Dim x1 As Integer = barcodeBBox.X + barcodeBBox.Width   
            Dim y0 As Integer = barcodeBBox.Y   
            Dim y1 As Integer = barcodeBBox.Y + barcodeBBox.Height   
            Dim result As New System.Text.StringBuilder((barcodeBBox.Width * 2 + 2) * barcodeBBox.Height)   
            For y As Integer = y0 To y1   
                For x As Integer = x0 To x1   
                    Dim symbol As Char = " "C   
                    If barcode.IsBlackCell(x, y) Then   
                        If barcode.IsDataLayer(x, y) Then   
                            symbol = "D"C   
                        ElseIf barcode.IsAlignmentPattern(x, y) Then   
                            symbol = "A"C   
                        ElseIf barcode.IsFormatInformation(x, y) Then   
                            symbol = "F"C   
                        ElseIf barcode.IsSearchPattern(x, y) Then   
                            symbol = "#"C   
                        ElseIf barcode.IsTimingPattern(x, y) Then   
                            symbol = "T"C   
                        End If   
                    End If   
                    result.Append(symbol)   
                Next   
                result.AppendLine()   
            Next   
            System.IO.File.WriteAllText(outputFilename, result.ToString())   
        End Using   
    End Sub
    
    
    
    /// <summary>
    /// Generates the QR barcode structure as text file.
    /// </summary>
    /// <param name="value">The barcode value.</param>
    /// <param name="outputFilename">The output filename.</param>
    public static void GenerateQRBarcodeStructureAsText(string value, string outputFilename)
    {
        using (Vintasoft.Barcode.BarcodeWriter writer = new Vintasoft.Barcode.BarcodeWriter())
        {
            writer.Settings.Barcode = Vintasoft.Barcode.BarcodeType.Aztec;
            writer.Settings.Value = value;
            Vintasoft.Barcode.BarcodeStructure.MatrixBarcodeStructure barcode = (Vintasoft.Barcode.BarcodeStructure.MatrixBarcodeStructure)writer.GetBarcodeStructure();
            Vintasoft.Primitives.VintasoftRectI barcodeBBox = barcode.GetBoundingBox();
            int x0 = barcodeBBox.X;
            int x1 = barcodeBBox.X + barcodeBBox.Width;
            int y0 = barcodeBBox.Y;
            int y1 = barcodeBBox.Y + barcodeBBox.Height;
            System.Text.StringBuilder result = new System.Text.StringBuilder((barcodeBBox.Width * 2 + 2) * barcodeBBox.Height);
            for (int y = y0; y <= y1; y++)
            {
                for (int x = x0; x <= x1; x++)
                {
                    char symbol = ' ';
                    if (barcode.IsBlackCell(x, y))
                    {
                        if (barcode.IsDataLayer(x, y))
                            symbol = 'D';
                        else if (barcode.IsAlignmentPattern(x, y))
                            symbol = 'A';
                        else if (barcode.IsFormatInformation(x, y))
                            symbol = 'F';
                        else if (barcode.IsSearchPattern(x, y))
                            symbol = '#';
                        else if (barcode.IsTimingPattern(x, y))
                            symbol = 'T';
                    }
                    result.Append(symbol);
                }
                result.AppendLine();
            }
            System.IO.File.WriteAllText(outputFilename, result.ToString());
        }
    }
    
    

    Иерархия наследования
    Требования

    Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

    Смотрите также