Գեներացնել և ճանաչել Հան Սին կոդի շտրիխ կոդերը .NET-ում

Բլոգի կատեգորիա՝ Barcode.NET

04.05.2020

Հան Սին կոդը երկչափ մատրիցային սիմվոլոգիա է, որը կազմված է անվանական քառակուսի մոդուլների զանգվածից, որոնք դասավորված են ընդհանուր քառակուսի նախշով:
Samples of Han Xin Code barcodes

Հան Սին կոդի շտրիխ կոդի մատրիցն ունի չորս որոնման ձևանմուշ (A1-A4), որոնք տեղադրված են շտրիխ կոդի եզրերին: Շտրիխ կոդի մատրիցն ունի նաև հավասարեցման ձևանմուշներ (B), որոնք տեղակայված են մատրիցի ներսում և թույլ են տալիս ճանաչել տարբեր աղավաղումներով շտրիխ կոդը, որը կարող է առաջանալ լուսանկարման գործընթացի թերությունների կամ մակերեսի անհարթության պատճառով, որի վրա տպագրված կամ պիտակավորված է շտրիխ կոդը:

Structure of Han Xin Code barcode


Հան Սին կոդի շտրիխ կոդն ունի հատուկ առանձնահատկություն. այն կարող է պահպանել GB18030 կոդավորման տեքստային տվյալները (2 և 4 բայթ սիմվոլներ) առավելագույնս կոմպակտ եղանակով:

Հան Սին կոդի ընդհանուր առանձնահատկությունները՝


VintaSoft Barcode .NET SDK-ն աջակցում է Հան Սինի կոդի (չինական խելամիտ կոդ) շտրիխ կոդերի ընթերցմանը, գրառմանը և տպագրության որակի ստուգմանը։

Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել Հան Սին կոդի շտրիխ կոդը որպես ռաստրային պատկեր։
/// <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");
    }
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել Հան Սին կոդի շտրիխ կոդը վեկտորային տեսքով։
/// <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();
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել Հան Սին կոդի շտրիխ կոդը որպես 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();
}

Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ճանաչել Հան Սին կոդի շտրիխ կոդը պատկերում։
/// <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();
            }
        }
    }
}

Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ճանաչել և ստուգել Հան Սին կոդի շտրիխ կոդի տպագրության որակը պատկերում։
/// <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);
}

Ահա VintaSoft Barcode Demo էկրանի նկարը, որը ցույց է տալիս Հան Սին կոդի շտրիխ կոդի ISO/IEC 15415 տպագրության որակի թեստի արդյունքը.
Result of ISO/IEC 15415 print quality test for Han Xin Code barcode