VintaSoft Barcode .NET SDK 16.0: Documentation for .NET developer
Vintasoft.Barcode.QualityTests Namespace / ISO15416QualityTest Class
Members Object Syntax Remarks Example Hierarchy Requirements SeeAlso
In This Topic
ISO15416QualityTest Class
In This Topic
ISO/IEC 15416 barcode print quality test for 1D linear barcodes.
Object Model
BarcodeInfo1D QualityTestAssessmentParameter ISO15416SymbolComponentQualityTest ISO15416QualityTest
Syntax
'Declaration

Public Class ISO15416QualityTest

public class ISO15416QualityTest

Remarks

We recomend to use the QualityTestManager class to perform print quality testing of 1D barcodes.
The algorithm of test is based on ISO/IEC 15416. Test allows to evaluate the barcode's print quality using the following parameters:

Example

   
   
Imports Vintasoft.Imaging   
   
Imports Vintasoft.Barcode   
Imports Vintasoft.Barcode.BarcodeInfo   
Imports Vintasoft.Barcode.QualityTests   
   
''' <summary>
''' Test that shows how to test the print quality of 1D barcodes.
''' </summary>
Class ISO15416QualityTestExample   
   
    ''' <summary>
    ''' Runs the test.
    ''' </summary>
    Public Shared Sub Test(filename As String)   
        ' load image with barcode from file
        Using barcodeImage As VintasoftBitmap = ImageCodecs.[Default].Decode(filename)   
            ' read barcodes from image and test the print quality of 1D barcodes
            ReadBarcodesAndTestBarcodePrintQuality(barcodeImage)   
        End Using   
    End Sub   
   
    ''' <summary>
    ''' Reads barcodes from image and tests the print quality of 1D barcodes.
    ''' </summary>
    Private Shared Sub ReadBarcodesAndTestBarcodePrintQuality(imageWithBarcodes As VintasoftBitmap)   
        ' create the barcode reader
        Using reader As New BarcodeReader()   
            ' specify that reader must collect information for quality test
            reader.Settings.CollectTestInformation = True   
   
            ' specify that reader must search for Code39 and Code128 barcodes only
            reader.Settings.ScanBarcodeTypes = BarcodeType.Code39 Or BarcodeType.Code128   
   
            ' read barcodes
            Dim barcodeInfos As IBarcodeInfo() = reader.ReadBarcodes(imageWithBarcodes)   
   
            ' for each found barcode
            For i As Integer = 0 To barcodeInfos.Length - 1   
                ' test print quality of barcode using ISO 15416 test
                Dim test As New ISO15416QualityTest(DirectCast(barcodeInfos(i), BarcodeInfo1D), imageWithBarcodes)   
   
                ' print results of ISO 15416 test
   
                Console.WriteLine(String.Format("[{0}] {1}", barcodeInfos(i).BarcodeType, barcodeInfos(i).Value))   
                Console.WriteLine(String.Format("Overall symbol grade:            {0}", test.OverallSymbolGrade))   
                If test.DifferentDecodedValues Then   
                    Console.WriteLine("Scan profiles has different barcode decode values!")   
                End If   
                If test.SymbolComponentQualityTests.Length = 1 Then   
                    Dim qualityTest As ISO15416SymbolComponentQualityTest = test.SymbolComponentQualityTests(0)   
                    Console.WriteLine(String.Format("Scan reflectance profiles:       {0}", qualityTest.ScanReflectanceProfiles.Length))   
                    Console.WriteLine("Scan reflectance profile grades:")   
                    For j As Integer = 0 To qualityTest.ScanReflectanceProfiles.Length - 1   
                        Console.Write(qualityTest.ScanReflectanceProfiles(j).ScanGrade.AlphabeticGrade)   
                    Next   
                Else   
                    For k As Integer = 0 To test.SymbolComponentQualityTests.Length - 1   
                        Console.WriteLine(String.Format("Symbol component:                {0}", k + 1))   
                        Dim qualityTest As ISO15416SymbolComponentQualityTest = test.SymbolComponentQualityTests(k)   
                        Console.WriteLine(String.Format("Scan reflectance profiles:       {0}", qualityTest.ScanReflectanceProfiles.Length))   
                        Console.WriteLine("Scan reflectance profile grades:")   
                        For j As Integer = 0 To qualityTest.ScanReflectanceProfiles.Length - 1   
                            Console.Write(qualityTest.ScanReflectanceProfiles(j).ScanGrade.AlphabeticGrade)   
                        Next   
                    Next   
                End If   
                Console.WriteLine()   
                Console.WriteLine()   
            Next   
        End Using   
    End Sub   
   
End Class


using System;

using Vintasoft.Imaging;

using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Barcode.QualityTests;

/// <summary>
/// Test that shows how to test the print quality of 1D barcodes.
/// </summary>
class ISO15416QualityTestExample
{

    /// <summary>
    /// Runs the test.
    /// </summary>
    public static void Test(string filename)
    {
        // load image with barcode from file
        using (VintasoftBitmap barcodeImage = ImageCodecs.Default.Decode(filename))
        {
            // read barcodes from image and test the print quality of 1D barcodes
            ReadBarcodesAndTestBarcodePrintQuality(barcodeImage);
        }
    }
    
    /// <summary>
    /// Reads barcodes from image and tests the print quality of 1D barcodes.
    /// </summary>
    static void ReadBarcodesAndTestBarcodePrintQuality(VintasoftBitmap imageWithBarcodes)
    {
        // create the barcode reader
        using (BarcodeReader reader = new BarcodeReader())
        {
            // specify that reader must collect information for quality test
            reader.Settings.CollectTestInformation = true;

            // specify that reader must search for Code39 and Code128 barcodes only
            reader.Settings.ScanBarcodeTypes = BarcodeType.Code39 | BarcodeType.Code128;

            // read barcodes
            IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes(imageWithBarcodes);

            // for each found barcode
            for (int i = 0; i < barcodeInfos.Length; i++)
            {
                // test print quality of barcode using ISO 15416 test
                ISO15416QualityTest test =
                    new ISO15416QualityTest((BarcodeInfo1D)barcodeInfos[i], imageWithBarcodes);

                // print results of ISO 15416 test

                Console.WriteLine(string.Format("[{0}] {1}",
                    barcodeInfos[i].BarcodeType, barcodeInfos[i].Value));
                Console.WriteLine(string.Format("Overall symbol grade:            {0}", test.OverallSymbolGrade));
                if (test.DifferentDecodedValues)
                    Console.WriteLine("Scan profiles has different barcode decode values!");
                if (test.SymbolComponentQualityTests.Length == 1)
                {
                    ISO15416SymbolComponentQualityTest qualityTest = test.SymbolComponentQualityTests[0];
                    Console.WriteLine(string.Format("Scan reflectance profiles:       {0}",
                        qualityTest.ScanReflectanceProfiles.Length));
                    Console.WriteLine("Scan reflectance profile grades:");
                    for (int j = 0; j < qualityTest.ScanReflectanceProfiles.Length; j++)
                        Console.Write(qualityTest.ScanReflectanceProfiles[j].ScanGrade.AlphabeticGrade);
                }
                else
                {
                    for (int k = 0; k < test.SymbolComponentQualityTests.Length; k++)
                    {
                        Console.WriteLine(string.Format("Symbol component:                {0}", k + 1));
                        ISO15416SymbolComponentQualityTest qualityTest = test.SymbolComponentQualityTests[k];
                        Console.WriteLine(string.Format("Scan reflectance profiles:       {0}",
                            qualityTest.ScanReflectanceProfiles.Length));
                        Console.WriteLine("Scan reflectance profile grades:");
                        for (int j = 0; j < qualityTest.ScanReflectanceProfiles.Length; j++)
                            Console.Write(qualityTest.ScanReflectanceProfiles[j].ScanGrade.AlphabeticGrade);
                    }
                }
                Console.WriteLine();
                Console.WriteLine();
            }
        }
    }

}

Inheritance Hierarchy

System.Object
   Vintasoft.Barcode.QualityTests.ISO15416QualityTest

Requirements

Target Platforms: .NET 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

See Also