VintaSoft Barcode .NET SDK это профессиональный кросс-платформенный SDK для Windows, Linux, macOS, Android, который позволяет распознавать и генерировать Data Matrix в .NET, WPF, Веб, MAUI. VintaSoft Barcode .NET SDK позволяет встраивать функциональность распознавания и генерации штрих-кодов Data Matrix, используя всего несколько строк кода.
Что такое штрих-код Data Matrix?
Data Matrix это двумерный матричный штрих-код получивший широкое распространение в промышленности, производстве и маркировке товаров. Отличительной особенностью штрих-кода Data Matrix является поисковый паттерн "L" в виде сплошной линии с двух сторон штрих-кода:
Особенности штрих-кода Data Matrix
Современный штрих-код Data Matrix версии ECC200 определяется стандартом ISO/IEC 16022 от 2006 года. Также стандарт описывает устаревшие версии от ECC000 до ECC140, которые не рекомендуются к использованию. Штрих-код Data Matrix может хранить смешанные данные различного типа в трех режимах кодирования:
- Alphanumeric (до 2235 символов)
- Byte (до 1555 байт)
- Numeric (до 3116 цифр)
Штрих-код Data Matrix использует алгоритм коррекции ошибок Reed-Solomon что позволяет распознавать поврежденные штрих-коды.
Поддержка стандарта GS1 позволяет кодировать данные в формате GS1 (
BarcodeSymbologySubsets.GS1DataMatrix).
Штрих-код Data Matrix может кодировать следующие специальные символы:
Прямоугольный штрих-код Data Matrix – когда область для маркировки не квадратная
Существует 6 специальных версий штрих-кода Data Matrix с прямоугольной матрицей:
Такие штрих-коды используют на мелких изделиях когда доступная область не позволяет разместить квадратный штрих-код.
Структура матрицы штрих-кода Data Matrix
Матрица штрих-кода Data Matrix версии ECC200 имеет 24 квадратные версии размером от 10х10 до 144х144 модуля, а также прямоугольные версии: 8х18, 8x32, 12x26, 12x36, 16x36 и 16x48 модулей. Ориентация штрих-кода определяется по поисковому паттерну "L" центр которого расположен в левом нижнем углу штрих-кода.
- Поисковый паттерн
- Тайминг паттерны
- Слой данных и коррекции ошибок
Отличить современную версию Data Matrix ECC200 от устаревшей версии ECC000-ECC140 просто: в версии ECC200 размер матрицы всегда четный, а ECC000-140 всегда нечетный, поэтому в ECC200 версии в вернем правом углу всегда находится белый модуль, а в устаревшей версии всегда черный модуль.
Если нужно закодировать большой объем данных - специальный символ Structure Append
Штрих-код Data Matrix поддерживает специальный символ "Structure Append", который позволяет разделить данные на несколько штрих-кодов Data Matrix. "Structure Append" cимвол кодируется в штрих-коде и позволяет однозначно определить количество штрих-кодов-частей и их порядок:
VintaSoft Barcode .NET SDK содержит алгоритм восстановления данных из набора штрих-кодов-частей Data Matrix которые были разделены используя символ "Structure Append".
Какие штрих-коды Data Matrix может распознавать VintaSoft Barcode .NET SDK?
VintaSoft Barcode .NET SDK распознает все типы штрих-кодов Data Matrix версии ECC200. При распознавании применяются уникальные алгоритмы позволяющие быстро распознавать штрих-коды, которые имеют различные проблемы:
- поврежденная матрица
- низкая контрастность
- низкая модуляция
- неравномерное освещение
- сжатие по одной из сторон
- пространственные искажения
- напечатанные на искаженных поверхностях
- большое количество штрих-кодов на одном изображении
Вот C# код, который демонстрирует как распознать штрих-коды Data Matrix в изображении, которое получено с камеры:
/// <summary>
/// Reads Data Matrix barcodes from a <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="bitmap">A bitmap with barcodes.</param>
public static void ReadDataMatrixBarcodesFromBitmap(System.Drawing.Bitmap bitmap)
{
// create barcode reader
using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
{
// specify that reader must search for Data Matrix barcodes
reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.DataMatrix;
// read barcodes from image
Vintasoft.Barcode.IBarcodeInfo[] infos = Vintasoft.Barcode.GdiExtensions.ReadBarcodes(reader, bitmap);
// if barcodes are not detected
if (infos.Length == 0)
{
System.Console.WriteLine("No barcodes found.");
}
// if barcodes are detected
else
{
// get information about extracted barcodes
System.Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
System.Console.WriteLine();
for (int i = 0; i < infos.Length; i++)
{
Vintasoft.Barcode.IBarcodeInfo info = infos[i];
System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, info.BarcodeType));
System.Console.WriteLine(string.Format("Value: {0}", info.Value));
System.Console.WriteLine(string.Format("Region: {0}", info.Region));
System.Console.WriteLine();
}
}
}
}
Какие штрих-коды Data Matrix может генерировать VintaSoft Barcode .NET SDK?
VintaSoft Barcode .NET SDK генерирует все типы штрих-кодов Data Matrix.
Вот C# код, который демонстрирует как сгенерировать растровое изображение штрих-кода Data Matrix:
/// <summary>
/// Returns the Data Matrix barcode as <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="value">The barcode value.</param>
/// <returns>A <see cref="System.Drawing.Bitmap"/> object.</returns>
public static System.Drawing.Bitmap GetDataMatrixBarcodeAsBitmap(string value)
{
// create the barcode writer
using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
{
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix;
barcodeWriter.Settings.Value = value;
// get a barcode image as System.Drawing.Bitmap
return Vintasoft.Barcode.GdiExtensions.GetBarcodeAsBitmap(barcodeWriter);
}
}
Вот C# код, который демонстрирует как сгенерировать векторное (SVG) изображение штрих-кода Data Matrix:
/// <summary>
/// Returns the Data Matrix barcode in vector form as a SVG string.
/// </summary>
/// <param name="barcodeValue">Barcode value.</param>
public static void GetDataMatrixBarcodeAsSvgString(string barcodeValue)
{
// create the barcode writer
using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
{
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix;
barcodeWriter.Settings.Value = barcodeValue;
// generate Data Matrix barcode as a SVG string
return barcodeWriter.GetBarcodeAsSvgFile();
}
}