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

Public Class MatrixBarcodeStructure
   Inherits BarcodeStructureBase

public class MatrixBarcodeStructure : 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 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

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