Aspose.Barcode for Cpp 18.11 Release Notes

New Features

  • List or chart of prerequisites required to generate successful barcode image of any barcode type 
  • Implemented UpcaGs1DatabarCoupon for new barcode generation API 
  • Implemented Interpolation AutoSize mode 
  • Create User Control for new generation API 
  • Implemented MaxiCode and DotCode for new barcode generation API 
  • GS1 DataBar Expanded Stacked barcode did not pass GS1 Canda barcode verification
  • Added new barcode subsets to DecodeType 

All Changes

Key Summary Category
BARCODENET-36791 Prepare preview version of new barcode generation API New Feature
BARCODENET-36872 List or chart of prerequisites required to generate successful barcode image of any barcode type  New Feature
BARCODENET-36941 Implement UpcaGs1DatabarCoupon for new barcode generation API  New Feature
BARCODENET-36930 Implement Interpolation AutoSize mode  New Feature
BARCODENET-36953 Create User Control for new generation API  New Feature
BARCODENET-36923 Implement MaxiCode for new barcode generation API  New Feature
BARCODENET-36922 Implement DotCode for new barcode generation API  New Feature
BARCODENET-36713 Investigate new architecture of barcodes recognition filters.  New Feature
BARCODENET-36940 Implement UpcaGs1Code128Coupon for new barcode generation API  New Feature
BARCODENET-36973 Not able to read all barcodes from TIFF images  New Feature
BARCODENET-36962 Not able to read the barcode  New Feature
BARCODENET-37013 Deprecate BarCodeBuilder  New Feature
BARCODENET-37019 Add new barcode subsets to DecodeType  New Feature
BARCODENET-36945 Not able to detect barcode  New Feature
BARCODENET-34367 Improve the recognition of a 3D-distorted and rotated 2D-barcodes  New Feature
BARCODENET-36389 Improve the recognition of a 3D-distorted QR code  New Feature
BARCODENET-37020 Add minor fixes to BarCodeReader  New Feature
BARCODENET-36648 Improve WPF control appearance  New Feature
BARCODENET-37026 GS1 DataBar Expanded Stacked barcode did not pass GS1 Canda barcode verification (.NET) New Feature
BARCODENET-36215 Unable to Read the DatabarExpandedStacked barcode from a PNG image Bug
BARCODENET-36942 Incorrect draw Code16K barcode, without above and below borders  Bug
BARCODENET-36952 GS1 Datamatrix barcode is not wrapping the text in case of CodeLocation.Right  Bug
BARCODENET-36946 License is not working as embedded resource  Bug
BARCODENET-36795 DPI settings works incorrectly with rotation  Bug
BARCODENET-36956 Databars are generated incorrectly from GS1 string  Bug
BARCODENET-37008 ITF14 barcode fails GS1 Verification Process  Bug
BARCODENET-34141 Can’t recognize DataMatrix codes from the JPG image  Bug
BARCODENET-36957 Text part isn’t correct in ENA13 when change resolution  Bug
BARCODENET-36786 Aspose.BarCode is detecting only 1 out of 3 barcodes from PDF  Bug
BARCODENET-37001 Using same instance of BarcodeReader throws exceptions  Bug
BARCODENET-37010 Barcode CODE39 reading problem (.NET)  Bug
BARCODENET-37000 Barcode Detection does not constrain to the defined region.  Bug
BARCODENET-37028 MicrE13B for safe bitmap access Bug

Usage Examples

BARCODENET-36791 Prepare preview version of new barcode generation API We would like to introduce the preview version of new barcode generation API. It has been developed to cover real use cases, like document printing and UI design, as well as we try to make it more simple then previous one. New class Aspose.BarCode.Generation.BarCodeGenerator has been added and it has following main features:

Two different modes of generation depending on your requirements. If you have restricted requirements of barcode size, then you can set AutoSizeMode = Nearest and required barcode size. Barcode generator will calculate the all other parameters like xDimension, AspectRatio, etc to fit barcode into desired size:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::QR, u"Aspose.BarCode sample");

generator->set_AutoSizeMode(Aspose::BarCode::Generation::AutoSizeMode::Nearest);

generator->get_BarCodeWidth()->set_Pixels(200);

generator->get_BarCodeHeight()->set_Pixels(200);

generator->Save(u"out.png");

In opposite if doesn’t have required size, you can use AutoSizeMode = None and set all generator parameters by yourself.

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::QR, u"Aspose.BarCode sample");

generator->get_XDimension()->set_Pixels(3);

generator->get_Margins()->get_Left()->set_Pixels(20);

generator->get_Margins()->get_Right()->set_Pixels(20);

generator->Save(u"out.png");

In addition, if you just want to know the barcode size without saving image you can call method RecalculateValues() and get barcode size.

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::QR, u"Aspose.BarCode sample");

generator->get_XDimension()->set_Pixels(3);

generator->get_D2()->set_AspectRatio(1.5f);

generator->RecalculateValues();

float width = generator->get_BarCodeWidth()->get_Pixels();

float height = generator->get_BarCodeWidth()->get_Pixels();

Needless to say, that in the complex scenarios AutoSizeMode can be changed from None to Nearest and vice versa to cover all the requirements.

Unit-based system of values. All measurement values can be get and set in pixels, millimeters, inches in the same time. You can easily change the resolution of image and prepare the same barcode for printing, LCD screens or retina-displays.

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::QR, u"Aspose.BarCode sample");

generator->set_AutoSizeMode(Aspose::BarCode::Generation::AutoSizeMode::Nearest);

generator->get_BarCodeWidth()->set_Millimeters(20);

generator->get_BarCodeHeight()->set_Millimeters(20);

generator->Save(u"for_display.png");

generator->set_Resolution(300);

generator->Save(u"for_printer.png");

Properties for specific barcode types are grouped. Such specific properties like QR_EncodeType of DataMatrix_Ecc are grouped by type to simplify all the API for new users.

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::QR);

generator->get_QR()->set_Version(Aspose::BarCode::QRVersion::Version18);

generator->get_QR()->set_ErrorLevel(Aspose::BarCode::QRErrorLevel::LevelM);

generator->Save(u"qr.png");

BarCodeGenearator has predefined default codetext, so you can just explore the default codetext format for the specific type.

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::AustralianPosteParcel);

System::String codetext = generator->get_CodeText();//99712345678901234567890103456
System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::EAN13);

System::String codetext = generator->get_CodeText();//590123412345

Stay tuned, more features are coming soon! It is a preview version and your feedback are welcome. In the further releases we will add one more generation mode and new UI controls based on new API.

BARCODENET-36215 Unable to Read the DatabarExpandedStacked barcode from a PNG image Sample

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"DatabarExpandedStacked_Sample.png", DecodeType::DatabarExpandedStacked);

while (reader->Read())

{

    System::Console::WriteLine(u"Type: {0} Text: {1}", reader->GetCodeType(), System::ObjectExt::Box<System::String>(reader->GetCodeText()));

}

Result:

Type: DatabarExpandedStacked Text: (8110)106141411234562891101201212085010048000214025610048000310123191000

BARCODENET-36941 - Implement UpcaGs1DatabarCoupon for new barcode generation API Code sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::UpcaGs1DatabarCoupon);

generator->Save(u"UpcaGs1DatabarCoupon.png");

Result:

Png image

BARCODENET-36930 - Implement Interpolation AutoSize mode Code sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::DataMatrix);

generator->set_AutoSizeMode(Aspose::BarCode::Generation::AutoSizeMode::Interpolation);

generator->get_BarCodeWidth()->set_Millimeters(50);

generator->get_BarCodeHeight()->set_Inches(1.3f);

System::SharedPtr<System::Drawing::Bitmap> barcode = generator->GenerateBarCodeImage();

barcode->Save(u"DataMatrix.png");

Result:

Png image

BARCODENET-36942 - Incorrect draw Code16K barcode, without above and below borders Code sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::Code16K);

generator->set_AutoSizeMode(Aspose::BarCode::Generation::AutoSizeMode::Nearest);

generator->get_BarCodeWidth()->set_Pixels(100);

generator->get_CodeTextStyle()->set_Location(Aspose::BarCode::CodeLocation::None);

generator->Save(u"Code16K_Nearest.png");

Result:

Png image

BARCODENET-36952 - GS1 Datamatrix barcode is not wrapping the text in case of CodeLocation.Right We can use Display2DText property for only displayed text and we can insert ‘\n’ symbols in this case. Code sample:

System::String CODICE = u"(90)0843110730<<<<452287005001T8";

System::String displayedText = System::String(u"(90)0843") + System::Environment::get_NewLine() +

                                u"110730<<<<" + System::Environment::get_NewLine() +

                                u"452287" + System::Environment::get_NewLine() +

                                u"005001T8" + System::Environment::get_NewLine();

System::SharedPtr<BarCodeBuilder> builder = System::MakeObject<BarCodeBuilder>(CODICE, EncodeTypes::GS1DataMatrix);

builder->set_CodeLocation(Aspose::BarCode::CodeLocation::Right);

builder->set_Display2DText(displayedText);

System::SharedPtr<System::Drawing::Bitmap> barcode = builder->GenerateBarCodeImage();

barcode->Save(u"Display2DText.png");

Result:

Png image

BARCODENET-36923 - Implement MaxiCode for new barcode generation API Code sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::MaxiCode);

generator->set_MaxiCodeEncodeMode(5);

System::SharedPtr<System::Drawing::Bitmap> barcode = generator->GenerateBarCodeImage();

barcode->Save(u"MaxiCode.png");

BARCODENET-36922 - Implement DotCode for new barcode generation API

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::DotCode);

generator->set_DotCodeMask(2);

System::SharedPtr<System::Drawing::Bitmap> barcode = generator->GenerateBarCodeImage();

barcode->Save(u"DotCode.png");

BARCODENET-36713 - Investigate new architecture of barcodes recognition filters.

Usage of QualitySettings presets

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"c:\\test.jpg");

//set high performance mode

reader->set_QualitySettings(QualitySettings::get_HighPerformance());

while (reader->Read())

{

    System::Console::WriteLine(System::String(u"BarCode CodeText: ") + reader->GetCodeText());

}

Usage of QualitySettings Presets with Manual Options Set Up

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"c:\\test.jpg");

//set high performance mode

reader->set_QualitySettings(QualitySettings::get_HighPerformance());

//set separate options

reader->get_QualitySettings()->set_AllowMedianSmoothing(true);

reader->get_QualitySettings()->set_MedianSmoothingWindowSize(5);

while (reader->Read())

{

    System::Console::WriteLine(System::String(u"BarCode CodeText: ") + reader->GetCodeText());

}

Usage of QualitySettings Manual Options Set Up

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"c:\\test.jpg");

//default mode is NormalQuality

//set separate options

reader->get_QualitySettings()->set_AllowMedianSmoothing(true);

reader->get_QualitySettings()->set_MedianSmoothingWindowSize(5);

while (reader->Read())

{

    System::Console::WriteLine(System::String(u"BarCode CodeText: ") + reader->GetCodeText());

}

Bitmap with Proceed Recangle Set Up Sample

System::SharedPtr<System::IO::FileStream> lStream = System::MakeObject<System::IO::FileStream>(u"c:\\test.jpg", System::IO::FileMode::Open, System::IO::FileAccess::Read, System::IO::FileShare::Read);

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>();

reader->SetBarCodeImage(lStream);

while (reader->Read())

{

    System::Console::WriteLine(System::String(u"BarCode CodeText: ") + reader->GetCodeText());

}

Bitmap With Proceed Rectangles List Set Up Sample

System::SharedPtr<System::Drawing::Bitmap> lBitmap = System::MakeObject<System::Drawing::Bitmap>(u"c:\\test.jpg");

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>();

reader->SetBarCodeImage(lBitmap, System::MakeArray<System::Drawing::Rectangle>({System::Drawing::Rectangle(0, 0, lBitmap->get_Width(), lBitmap->get_Height())}));

while (reader->Read())

{

    System::Console::WriteLine(System::String(u"BarCode CodeText: ") + reader->GetCodeText());

}

BARCODENET-36940 - Implement UpcaGs1Code128Coupon for new barcode generation API Sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::UpcaGs1Code128Coupon);

generator->set_CodeText(u"514141100906(01)88898765432109");

generator->set_AutoSizeMode(Aspose::BarCode::Generation::AutoSizeMode::Interpolation);

generator->get_BarCodeWidth()->set_Pixels(500);

generator->get_BarCodeHeight()->set_Pixels(200);

generator->Save(u"UpcaGs1Code128Coupon_Interpolation_500x200.png");

BARCODENET-36962 - Not able to read the barcode QualitySettings.AllowInvertImage can help with such images:

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(fileName, DecodeType::DataMatrix);

reader->get_QualitySettings()->set_AllowInvertImage(true);

System::SharedPtr<System::Collections::Generic::List<System::String>> lCodetexts = System::MakeObject<System::Collections::Generic::List<System::String>>();

while (reader->Read())

{

    lCodetexts->Add(reader->GetCodeText());

}

ASPOSE_ASSERT_EQ(1, lCodetexts->get_Count());

ASSERT_TRUE(lCodetexts->Contains(u"65359403095957"));

BARCODENET-36795 - DPI settings works incorrectly with rotation Sample:

System::SharedPtr<BarCodeGenerator> generator = System::MakeObject<BarCodeGenerator>(EncodeTypes::Code128);

generator->set_Resolution(144);

generator->set_RotationAngle(90);

generator->Save(u"rotated_dpi144.png");

BARCODENET-37019 - Add new barcode subsets to DecodeType

Usage of the new DecodeType fields:

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"test.png", DecodeType::Types1D);

while (reader->Read())

{

    System::Console::WriteLine(System::ObjectExt::ToString(reader->GetCodeType()) + u" " + reader->GetCodeText());

}

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"test.png", DecodeType::PostalTypes);

while (reader->Read())

{

    System::Console::WriteLine(System::ObjectExt::ToString(reader->GetCodeType()) + u" " + reader->GetCodeText());

}

System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"test.png", DecodeType::MostCommonTypes);

while (reader->Read())

{

    System::Console::WriteLine(System::ObjectExt::ToString(reader->GetCodeType()) + u" " + reader->GetCodeText());

}

Public API and Backward Incompatible Changes

Following members have been added:

  • Class Aspose::BarCode::Generation::BarCodeGenerator
  • Enum Aspose::BarCode::Generation::AutoSizeMode
  • Class Aspose::BarCode::Generation::AztecProperties
  • Class Aspose::BarCode::Generation::BorderProperties
  • Class Aspose::BarCode::Generation::Caption
  • Class Aspose::BarCode::Generation::ChecksumProperties
  • Class Aspose::BarCode::Generation::CodabarProperties
  • Class Aspose::BarCode::Generation::CodeTextStyle
  • Class Aspose::BarCode::Generation::D2Properties
  • Class Aspose::BarCode::Generation::DataMatrixProperties
  • Class Aspose::BarCode::Generation::FontUnit
  • Class Aspose::BarCode::Generation::ITFProperties
  • Class Aspose::BarCode::Generation::Margins
  • Class Aspose::BarCode::Generation::Pdf417Properties
  • Class Aspose::BarCode::Generation::QRProperties
  • Class Aspose::BarCode::Generation::SupplementProperties
  • Class Aspose::BarCode::Generation::Unit
  • Enum member Aspose::BarCode::Generation::AutoSizeMode::Interpolation
  • Property getter Aspose::BarCode::Generation::BarCodeGenerator::get_MaxiCodeEncodeMode
  • Property setter Aspose::BarCode::Generation::BarCodeGenerator::set_MaxiCodeEncodeMode
  • Property getter Aspose::BarCode::Generation::BarCodeGenerator::get_DotCodeMask
  • Property setter Aspose::BarCode::Generation::BarCodeGenerator::set_DotCodeMask
  • Property getter Aspose::BarCode::BarCodeRecognition::BarCodeReader::get_QualitySettings
  • Property setter Aspose::BarCode::BarCodeRecognition::BarCodeReader::set_QualitySettings
  • Class Aspose::BarCode::BarCodeRecognition::QualitySettings
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_HighPerformance
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_HighPerformance
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_NormalQuality
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_NormalQuality
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_HighQuality
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_HighQuality
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_MaxBarCodes
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_MaxBarCodes
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowInvertImage
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowInvertImage
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowIncorrectBarcodes
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowIncorrectBarcodes
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowComplexBackground
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowComplexBackground
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowMedianSmoothing
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowMedianSmoothing
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_MedianSmoothingWindowSize
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_MedianSmoothingWindowSize
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowRegularImage
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowRegularImage
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowDecreasedImage
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowDecreasedImage
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowWhiteSpotsRemoving
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowWhiteSpotsRemoving
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowOneDAdditionalScan
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowOneDAdditionalScan
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowOneDFastBarcodesDetector
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowOneDFastBarcodesDetector
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowMicroWhiteSpotsRemoving
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowMicroWhiteSpotsRemoving
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowSaltAndPaperFiltering
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowSaltAndPaperFiltering
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowDetectScanGap
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowDetectScanGap
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowDatamatrixIndustrialBarcodes
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowDatamatrixIndustrialBarcodes
  • Property getter Aspose::BarCode::BarCodeRecognition::QualitySettings::get_AllowQRMicroQrRestoration
  • Property setter Aspose::BarCode::BarCodeRecognition::QualitySettings::set_AllowQRMicroQrRestoration
  • Method Aspose::BarCode::BarCodeRecognition::BarCodeReader::SetBarCodeImage(System::SharedPtr<System::Drawing::Bitmap>, System::ArrayPtr<System::Drawing::Rectangle>)
  • Method Aspose::BarCode::BarCodeRecognition::BarCodeReader::SetBarCodeImage(System::SharedPtr<System::Drawing::Bitmap>, System::Drawing::Rectangle)
  • Method Aspose::BarCode::BarCodeRecognition::BarCodeReader::SetBarCodeImage(System::SharedPtr<System::IO::Stream>)
  • Field DecodeType::Types1D
  • Field DecodeType::PostalTypes
  • Field DecodeType::MostCommonTypes

Following members have been marked as obsolete:

  • Property getter Aspose::BarCode::BarCodeRecognition::BarCodeReader::get_MedianSmoothingWindowSize
  • Property setter Aspose::BarCode::BarCodeRecognition::BarCodeReader::set_MedianSmoothingWindowSize
  • Property getter Aspose::BarCode::BarCodeRecognition::BarCodeReader::get_RecognitionMode
  • Property setter Aspose::BarCode::BarCodeRecognition::BarCodeReader::set_RecognitionMode
  • Property getter Aspose::BarCode::BarCodeRecognition::BarCodeReader::get_ManualHints
  • Property setter Aspose::BarCode::BarCodeRecognition::BarCodeReader::set_ManualHints
  • Enum Aspose::BarCode::BarCodeRecognition::RecognitionMode
  • Enum Aspose::BarCode::BarCodeRecognition::ManualHint

Also class BarCodeBuilder has been deprecated. Please use BarCodeGenerator instead.