Класс MatrixBarcodeStructure
В этом разделе
Класс, хранящий структуру двумерного матричного штрих-кода (Aztec, QR Code, Micro QR, Data Matrix, Han Xin Code).
Объектная модель
Синтаксис
Ремарки
При создании штрих-кодов "дизайна" необходимо учитывать, что вы не можете изменить какой-либо элемент штрих-кода, если хотите распознать штрих-код.
Этот класс содержит информацию об элементах штрих-кода матричного штрих-кода и предоставляет информацию о важности элементов штрих-кода. для систем распознавания.
Информация о важности элементов штрих-кода для систем распознавания может быть использована для генерации "конструкторского" штрих-кода, который может быть распознан.
Двумерный матричный штрих-код обычно состоит из следующих слоев:
- 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
Смотрите также