Generar y reconocer códigos de barras Han Xin Code en .NET

Categoría del blog: Barcode.NET

04.05.2020

El código Han Xin es una simbología matricial bidimensional, que se compone de una matriz de módulos nominalmente cuadrados dispuestos en un patrón cuadrado general.
Ejemplos de códigos de barras del Código Han Xin

La matriz del código de barras del Código Han Xin cuenta con cuatro patrones de búsqueda (A1-A4) ubicados en los bordes del código de barras. Además, la matriz cuenta con los patrones de alineación (B), ubicados dentro de la matriz, que permiten el reconocimiento de códigos de barras con diversas distorsiones, que pueden aparecer como resultado de imperfecciones en el proceso de fotografía o irregularidades en la superficie donde se imprime o etiqueta el código de barras.

Estructura del código de barras Han Xin Code


El código de barras Han Xin Code tiene una característica especial: puede almacenar datos de texto de la codificación GB18030 (símbolos de 2 y 4 bytes) de la manera más compacta.

Características generales del código Han Xin:


VintaSoft Barcode .NET SDK admite la lectura, escritura y pruebas de calidad de impresión de códigos de barras Han Xin Code (Chinese Sensible Code).

Aquí hay un código C# que muestra cómo generar un código de barras Han Xin Code como imagen rasterizada:
/// <summary>
/// Generates Han Xin Code barcode as raster image.
/// </summary>
public void GenerateHanXinCodeBarcodeAsRasterImage()
{
    // create the barcode writer
    Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();

    // set barcode writer settings
    barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.HanXinCode;
    barcodeWriter.Settings.Value = "012345abcde";

    // get a barcode image
    using (System.Drawing.Image image = barcodeWriter.GetBarcodeAsBitmap())
    {
        // save the barcode image to a file
        image.Save("HanXinCodeBarcode.png");
    }
}


Aquí hay un código C# que muestra cómo generar un código de barras Han Xin Code en formato vectorial:
/// <summary>
/// Generates Han Xin Code barcode as graphics path.
/// </summary>
public System.Drawing.Drawing2D.GraphicsPath GenerateHanXinCodeBarcodeAsGraphicsPath()
{
    // create the barcode writer
    Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();

    // set barcode writer settings
    barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.HanXinCode;
    barcodeWriter.Settings.Value = "012345abcde";

    // return barcode as graphics path
    return barcodeWriter.GetBarcodeAsGraphicsPath();
}


Aquí hay un código C# que muestra cómo generar un código de barras Han Xin Code como imagen SVG:
/// <summary>
/// Generates Han Xin Code barcode as SVG image.
/// </summary>
public string GenerateHanXinCodeBarcodeAsSvgImage()
{
    // create the barcode writer
    Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();

    // set barcode writer settings
    barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.HanXinCode;
    barcodeWriter.Settings.Value = "012345abcde";

    // return barcode as SVG image
    return barcodeWriter.GetBarcodeAsSvgFile();
}

Aquí hay un código C# que muestra cómo reconocer un código de barras Han Xin Code en una imagen:
/// <summary>
/// Recognizes Han Xin Code barcode in image.
/// </summary>
public void RecognizeHanXinCodeBarcode()
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for Han Xin Code barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.HanXinCode;

        // specify that reader must search for horizontal and vertical barcodes only
        reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal | Vintasoft.Barcode.ScanDirection.Vertical;

        // read barcodes from image file
        Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("HanXinCodeBarcode.png");

        // if barcodes are not detected
        if (barcodeInfos.Length == 0)
        {
            Console.WriteLine("Barcodes are not found.");
        }
        // if barcodes are detected
        else
        {
            // get information about recognized barcodes

            Console.WriteLine(string.Format("{0} barcode(s) found:", barcodeInfos.Length));
            Console.WriteLine();
            for (int i = 0; i &lt; barcodeInfos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];
                Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
                Console.WriteLine(string.Format("Value:      {0}", barcodeInfo.Value));
                Console.WriteLine(string.Format("Region:     {0}", barcodeInfo.Region));
                Console.WriteLine();
            }
        }
    }
}

Aquí hay un código C# que muestra cómo reconocer y probar la calidad de impresión del código de barras Han Xin Code en una imagen:
/// <summary>
/// Recognizes and prints quality of Han Xin Code barcode in image.
/// </summary>
public void ReadBarcodesAndTestBarcodePrintQuality()
{
    // load image with barcode from file
    using (System.Drawing.Image barcodeImage = System.Drawing.Image.FromFile("HanXinCodeBarcode.png"))
    {
        // create the barcode reader
        using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
        {
            // specify that reader must search for Han Xin Code barcodes
            reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.HanXinCode;

            // specify that reader must collect information for quality test
            reader.Settings.CollectTestInformation = true;

            // read barcodes
            Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes(barcodeImage);

            // for each found barcode
            for (int i = 0; i &lt; barcodeInfos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];

                // print information about recognized barcode

                Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
                Console.WriteLine(string.Format("Value:      {0}", barcodeInfo.Value));
                Console.WriteLine(string.Format("Region:     {0}", barcodeInfo.Region));

                // test barcode print quality in accordance with ISO 15415
                Vintasoft.Barcode.QualityTests.ISO15415QualityTest test = new Vintasoft.Barcode.QualityTests.ISO15415QualityTest();
                test.CalculateGrades((Vintasoft.Barcode.BarcodeInfo.BarcodeInfo2D)barcodeInfo, barcodeImage);

                // print results of barcode print quality test

                Console.WriteLine("ISO15415 print quality test:");
                Console.WriteLine(string.Format("- Decode                         : {0}", GradeToString(test.DecodeGrade)));
                Console.WriteLine(string.Format("- Unused error correction        : {0} ({1}%)", GradeToString(test.UnusedErrorCorrectionGrade), test.UnusedErrorCorrection));
                Console.WriteLine(string.Format("- Symbol contrast                : {0} ({1}%)", GradeToString(test.SymbolContrastGrade), test.SymbolContrast));
                Console.WriteLine(string.Format("- Axial nonuniformity            : {0} ({1})", GradeToString(test.AxialNonuniformityGrade), test.AxialNonuniformity));
                Console.WriteLine(string.Format("- Grid nonuniformity             : {0} ({1} cell)", GradeToString(test.GridNonuniformityGrade), test.GridNonuniformity));
                Console.WriteLine(string.Format("- Modulation                     : {0}", GradeToString(test.ModulationGrade)));
                Console.WriteLine(string.Format("- Reflectance margin             : {0}", GradeToString(test.ReflectanceMarginGrade)));
                Console.WriteLine(string.Format("- Fixed pattern damage           : {0}", GradeToString(test.FixedPatternDamageGrade)));
                Console.WriteLine(string.Format("- Distortion angle (informative) : {0}°", test.DistortionAngle));
                Console.WriteLine();
            }
        }
    }
}

/// <summary>
/// Converts ISO15415 quality grade into string value.
/// </summary>
static string GradeToString(Vintasoft.Barcode.QualityTests.ISO15415QualityGrade grade)
{
    int gradeAsInt = (int)grade;
    return string.Format("{0}({1})", gradeAsInt, grade);
}

Aquí hay una captura de pantalla de Demostración de código de barras de VintaSoft que muestra el resultado de la prueba de calidad de impresión ISO/IEC 15415 para el código de barras Han Xin Code:
Resultado de la calidad de impresión ISO/IEC 15415 prueba para código de barras Han Xin Code