BarcodeQRCodeSDK 2.3.3
See the version list below for details.
dotnet add package BarcodeQRCodeSDK --version 2.3.3
NuGet\Install-Package BarcodeQRCodeSDK -Version 2.3.3
<PackageReference Include="BarcodeQRCodeSDK" Version="2.3.3" />
paket add BarcodeQRCodeSDK --version 2.3.3
#r "nuget: BarcodeQRCodeSDK, 2.3.3"
// Install BarcodeQRCodeSDK as a Cake Addin #addin nuget:?package=BarcodeQRCodeSDK&version=2.3.3 // Install BarcodeQRCodeSDK as a Cake Tool #tool nuget:?package=BarcodeQRCodeSDK&version=2.3.3
Barcode and QR Code Reader SDK
The Barcode and QR Code Reader SDK is a wrapper for Dynamsoft Barcode Reader SDK, supporting .NET and C++ application development for 1D and 2D barcode recognition.
Supported Platforms
- Windows (x64)
- Linux (x64)
- macOS (x64)
- Android
License Activation
Click here to get a valid license key.
C++ Development
Quick Start
#include <iostream>
#include <fstream>
#include "DynamsoftBarcodeReader.h"
#include "DynamsoftCommon.h"
using namespace dynamsoft::dbr;
typedef struct BarcodeFormatSet
{
int barcodeFormatIds;
int barcodeFormatIds_2;
}BarcodeFormatSet;
unsigned long GetTime()
{
#if defined(_WIN64) || defined(_WIN32)
return GetTickCount64();
#else
struct timeval timing;
gettimeofday(&timing, NULL);
return timing.tv_sec * 1000 + timing.tv_usec / 1000;
#endif
}
void ToHexString(unsigned char* pSrc, int iLen, char* pDest)
{
const char HEXCHARS[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
int i;
char* ptr = pDest;
for (i = 0; i < iLen; ++i)
{
snprintf(ptr, 4, "%c%c ", HEXCHARS[(pSrc[i] & 0xF0) >> 4], HEXCHARS[(pSrc[i] & 0x0F) >> 0]);
ptr += 3;
}
}
void OutputResult(CBarcodeReader& reader, int errorcode, float time)
{
char* pszTemp = NULL;
char* pszTemp1 = NULL;
char* pszTemp2 = NULL;
int iRet = errorcode;
pszTemp = (char*)malloc(4096);
if (iRet != DBR_OK && iRet != DBRERR_MAXICODE_LICENSE_INVALID && iRet != DBRERR_AZTEC_LICENSE_INVALID && iRet != DBRERR_LICENSE_EXPIRED && iRet != DBRERR_QR_LICENSE_INVALID && iRet != DBRERR_GS1_COMPOSITE_LICENSE_INVALID &&
iRet != DBRERR_1D_LICENSE_INVALID && iRet != DBRERR_PDF417_LICENSE_INVALID && iRet != DBRERR_DATAMATRIX_LICENSE_INVALID && iRet != DBRERR_GS1_DATABAR_LICENSE_INVALID && iRet != DBRERR_PATCHCODE_LICENSE_INVALID &&
iRet != DBRERR_POSTALCODE_LICENSE_INVALID && iRet != DBRERR_DOTCODE_LICENSE_INVALID && iRet != DBRERR_DPM_LICENSE_INVALID && iRet != DBRERR_IRT_LICENSE_INVALID && iRet != DMERR_NO_LICENSE && iRet != DMERR_TRIAL_LICENSE)
{
snprintf(pszTemp, 4096, "Failed to read barcode: %s\r\n", CBarcodeReader::GetErrorString(iRet));
printf("%s", pszTemp);
free(pszTemp);
return;
}
TextResultArray* paryResult = NULL;
reader.GetAllTextResults(&paryResult);
if (paryResult->resultsCount == 0)
{
snprintf(pszTemp, 4096, "No barcode found. Total time spent: %.3f seconds.\r\n", time);
printf("%s", pszTemp);
free(pszTemp);
CBarcodeReader::FreeTextResults(&paryResult);
return;
}
snprintf(pszTemp, 4096, "Total barcode(s) found: %d. Total time spent: %.3f seconds\r\n\r\n", paryResult->resultsCount, time);
printf("%s", pszTemp);
for (int iIndex = 0; iIndex < paryResult->resultsCount; iIndex++)
{
snprintf(pszTemp, 4096, "Barcode %d:\r\n", iIndex + 1);
printf("%s", pszTemp);
snprintf(pszTemp, 4096, " Type: %s\r\n", paryResult->results[iIndex]->barcodeFormatString);
printf("%s", pszTemp);
snprintf(pszTemp, 4096, " Value: %s\r\n", paryResult->results[iIndex]->barcodeText);
printf("%s", pszTemp);
pszTemp1 = (char*)malloc(paryResult->results[iIndex]->barcodeBytesLength * 3 + 1);
pszTemp2 = (char*)malloc(paryResult->results[iIndex]->barcodeBytesLength * 3 + 100);
ToHexString(paryResult->results[iIndex]->barcodeBytes, paryResult->results[iIndex]->barcodeBytesLength, pszTemp1);
snprintf(pszTemp2, paryResult->results[iIndex]->barcodeBytesLength * 3 + 100, " Hex Data: %s\r\n", pszTemp1);
printf("%s", pszTemp2);
free(pszTemp1);
free(pszTemp2);
}
free(pszTemp);
CBarcodeReader::FreeTextResults(&paryResult);
}
int main(int argc, const char* argv[])
{
int iIndex = 0;
int iRet = -1;
unsigned long ullTimeBegin = 0;
unsigned long ullTimeEnd = 0;
char szErrorMsg[256];
PublicRuntimeSettings runtimeSettings;
printf("*************************************************\r\n");
printf("Welcome to Dynamsoft Barcode Reader Demo\r\n");
printf("*************************************************\r\n");
printf("Hints: Please input 'Q' or 'q' to quit the application.\r\n");
iRet = CBarcodeReader::InitLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==", szErrorMsg, 256);
if (iRet != DBR_OK)
{
printf("InitLicense Failed: %s\n", szErrorMsg);
}
CBarcodeReader reader;
while (1)
{
std::string input;
std::cout << "\r\n>> Step 1: Input your image file's full path:\r\n";
std::cin >> input;
if (input._Equal("q") || input._Equal("Q"))
{
return true;
}
std::ifstream file(input);
if (!file.good()) {
std::cout << "Please input a valid path.\r\n" << std::endl;
continue;
}
reader.InitRuntimeSettingsWithString("{\"ImageParameter\":{\"Name\":\"BestCoverage\",\"BarcodeFormatIds\": [\"BF_ALL\"],\"BarcodeFormatIds_2\": [\"BF2_POSTALCODE\", \"BF2_DOTCODE\"] , \"DeblurLevel\":9,\"ExpectedBarcodesCount\":512,\"ScaleDownThreshold\":100000,\"LocalizationModes\":[{\"Mode\":\"LM_CONNECTED_BLOCKS\"},{\"Mode\":\"LM_SCAN_DIRECTLY\"},{\"Mode\":\"LM_STATISTICS\"},{\"Mode\":\"LM_LINES\"},{\"Mode\":\"LM_STATISTICS_MARKS\"}],\"GrayscaleTransformationModes\":[{\"Mode\":\"GTM_ORIGINAL\"},{\"Mode\":\"GTM_INVERTED\"}]}}", CM_OVERWRITE, szErrorMsg, 256);
reader.GetRuntimeSettings(&runtimeSettings);
runtimeSettings.barcodeFormatIds = BF_ALL;
runtimeSettings.barcodeFormatIds_2 = BF2_POSTALCODE | BF2_DOTCODE;
iRet = reader.UpdateRuntimeSettings(&runtimeSettings, szErrorMsg, 256);
if (iRet != DBR_OK)
{
printf("Error code: %d. Error message: %s\n", iRet, szErrorMsg);
return -1;
}
ullTimeBegin = GetTime();
iRet = reader.DecodeFile(input.c_str(), "");
ullTimeEnd = GetTime();
OutputResult(reader, iRet, (((float)(ullTimeEnd - ullTimeBegin)) / 1000));
}
return 0;
}
Please refer to C++ Development for more information.
.NET Development
Quick Start
using System;
using Dynamsoft;
namespace Test
{
class Program
{
static void Main(string[] args)
{
BarcodeQRCodeReader.InitLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ=="); // Get a license key from https://www.dynamsoft.com/customer/license/trialLicense?product=dbr
BarcodeQRCodeReader? reader = null;
try {
reader = BarcodeQRCodeReader.Create();
Console.WriteLine("Please enter an image file: ");
string? filename = Console.ReadLine();
if (filename != null) {
Result[]? results = reader.DecodeFile(filename);
if (results != null) {
foreach (Result result in results) {
Console.WriteLine(result.Text);
}
}
else {
Console.WriteLine("No barcode found.");
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
if (reader != null)
{
reader.Destroy();
}
}
}
}
}
Methods
public static void InitLicense(string license)
public static BarcodeQRCodeReader Create()
public Result[]? DecodeFile(string filename)
public Result[]? DecodeBuffer(byte[] buffer, int width, int height, int stride, ImagePixelFormat format)
public Result[]? DecodeBase64(string base64string)
public static string? GetVersionInfo()
public void SetParameters(string parameters)
Usage
Set the license key:
BarcodeQRCodeReader.InitLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==");
Initialize the barcode and QR code reader object:
BarcodeQRCodeReader? reader = BarcodeQRCodeReader.Create();
Decode barcode and QR code from an image file:
Result[]? results = reader.DecodeFile(filename);
Decode barcode and QR code from a base64 string:
Result[]? results = reader.DecodeBase64(base64string);
Decode barcode and QR code from a buffer:
BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); BarcodeQRCodeReader.ImagePixelFormat format = BarcodeQRCodeReader.ImagePixelFormat.IPF_ARGB_8888; switch (bitmap.PixelFormat) { case PixelFormat.Format24bppRgb: format = BarcodeQRCodeReader.ImagePixelFormat.IPF_RGB_888; break; case PixelFormat.Format32bppArgb: format = BarcodeQRCodeReader.ImagePixelFormat.IPF_ARGB_8888; break; case PixelFormat.Format16bppRgb565: format = BarcodeQRCodeReader.ImagePixelFormat.IPF_RGB_565; break; case PixelFormat.Format16bppRgb555: format = BarcodeQRCodeReader.ImagePixelFormat.IPF_RGB_555; break; case PixelFormat.Format8bppIndexed: format = BarcodeQRCodeReader.ImagePixelFormat.IPF_GRAYSCALED; break; } int length = bitmap.Height * bmpData.Stride; byte[] bytes = new byte[length]; Marshal.Copy(bmpData.Scan0, bytes, 0, length); Result[]? results = reader.DecodeBuffer(bytes, bitmap.Width, bitmap.Height, bmpData.Stride, format); bitmap.UnlockBits(bmpData);
Get SDK version number:
string? version = BarcodeQRCodeReader.GetVersionInfo();
Customize parameters:
// Refer to https://www.dynamsoft.com/barcode-reader/parameters/structure-and-interfaces-of-parameters.html?ver=latest reader.SetParameters("{\"Version\":\"3.0\", \"ImageParameter\":{\"Name\":\"IP1\", \"BarcodeFormatIds\":[\"BF_QR_CODE\", \"BF_ONED\"], \"ExpectedBarcodesCount\":20}}");
Example
-
dotnet restore dotnet run
desktop-gui (Windows Only)
dotnet restore dotnet run
-
dotnet restore dotnet run
Building NuGet Package from Source Code
dotnet build --configuration Release
nuget pack .\BarcodeQRCodeSDK.nuspec
Supported Barcode Symbologies
Linear Barcodes (1D)
- Code 39 (including Code 39 Extended)
- Code 93
- Code 128
- Codabar
- Interleaved 2 of 5
- EAN-8
- EAN-13
- UPC-A
- UPC-E
- Industrial 2 of 5
2D Barcodes
- QR Code (including Micro QR Code and Model 1)
- Data Matrix
- PDF417 (including Micro PDF417)
- Aztec Code
- MaxiCode (mode 2-5)
- DotCode
Patch Code
GS1 Composite Code
GS1 DataBar
- Omnidirectional,
- Truncated, Stacked, Stacked
- Omnidirectional, Limited,
- Expanded, Expanded Stacked
Postal Codes
- USPS Intelligent Mail
- Postnet
- Planet
- Australian Post
- UK Royal Mail
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-android31.0 is compatible. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
native | native is compatible. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.4.0 | 995 | 8/13/2024 |
2.3.7 | 4,655 | 3/6/2024 |
2.3.6 | 491 | 2/2/2024 |
2.3.5 | 695 | 2/2/2024 |
2.3.4 | 5,844 | 4/4/2023 |
2.3.3 | 540 | 4/3/2023 |
2.3.2 | 587 | 4/3/2023 |
2.3.0 | 437 | 3/31/2023 |
2.2.1 | 416 | 3/30/2023 |
2.2.0 | 452 | 3/29/2023 |
2.1.0 | 7,119 | 7/15/2022 |
2.0.1 | 1,242 | 5/18/2022 |
2.0.0 | 545 | 5/12/2022 |
1.2.1 | 1,027 | 5/7/2022 |
1.2.0 | 815 | 3/31/2022 |
1.1.0 | 487 | 3/29/2022 |
1.0.11 | 468 | 3/29/2022 |
1.0.10 | 496 | 3/29/2022 |
Added support for Android