Распознавание и генерация штрих-кодов Data Matrix используя VintaSoft Barcode .NET SDK

Категория: Штрих-коды.NET

19 августа 2025

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 может хранить смешанные данные различного типа в трех режимах кодирования:

Штрих-код 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();
    }
}