Table of Contents
Introduction
Windows Phone 8 DataSymbol SDK is a barcode decoding library that can easily be integrated into a customer's applications.
DataSymbol SDK is supplied as a “.dll” file (Dynamic Link Library) and .winmd (Windows Metadata) for ARM and Win32
High performance and reliable barcode decoding. It reads torn, crumpled barcodes and also barcodes corrupted in other ways. Decodes barcodes printed on various surfaces - plastic surfaces, distorted surfaces, etc.
Can search only part of image for barcodes.
Reads all barcodes from an image at a once independently of the orientation and location of the barcode.
Does not require the barcode to have a quiet zone. That is why it can read incorrectly positioned barcodes.
Can read barcodes from noisy and blurred images.
It can find barcodes that cannot be recognized.
Decodes images that have distortions typical of scanned images and images received by fax.
Processes low resolution and dithering images.
Decodes barcodes with human-introduced artifacts (signatures, marks, etc.).
Requirements
The DataSymbol SDK library has the following system requirements:
· Windows Phone 8
· Visual Studio 2012
Installation
Copy the SDK in any folder of your machine.
Directory Structure
DataSymbol SDK is a Windows Phone component written on С++. You should add reference on BarcodeReader.winmd into your project.
The DataSymbol SDK contains the following directories and files:
/ BarcodeReaderLib /ARM |
ARM processor BarcodeReader.dll BarcodeReader.winmd |
/ BarcodeReaderLib /Win32 |
x86 (32-bit) processor BarcodeReader.dll BarcodeReader.winmd |
/Examples |
Examples folder |
/ Examples/PhoneApp1 |
C# example |
Technical Specifications
Decodes all popular barcode types.
Linear:
Interleaved 2/5, Industrial 2/5, Code 39, Code 39 Extended, Codabar, Code 11, Code 128, Code 128 Extended, EAN/UCC 128, UPC-E, UPC-A, EAN-8, EAN-13, Code 93, Code 93 Extended, DataBar Omnidirectional (RSS-14), DataBar Truncated (RSS-14 Truncated), DataBar Limited (RSS Limited), DataBar Stacked, DataBar Expanded, DataBar Expanded Stacked.
2D: PDF417 (PDF417 Compact), QRCode, DataMatrix, Aztec (Aztec Compact)
Decodes any oriented barcodes.
Decoding time: depends from many factors (library settings, image size, barcode count, etc.) but usually up to 50ms on 2 GHz machine on 840x480 image.
Approximately barcode resolution (minimal module size) in pixel
Linear: 0.7 px
PDF417: 1.3 px
DataMatrix: 2 px
QRCode: 1.6 px
AztecCode: 1.6 px
Getting Started
Create new Phone 8 project.
|
Add reference to the BarcodeReader.winmd file.
|
Now you can use the DataSymbol Decoder.
|
The usage of the library is very simple. Here below, please, find the typical sample of the library usage.
C#
//create decoder object BarcodeDecoder dec = new BarcodeDecoder();
//set decoder params DW_DECODEPARAMS par = new DW_DECODEPARAMS(); par.BarcodeTypes |= (uint)DW_BARTYPES.DW_ST_QRCODE; //add QRCode decoding dec.SetDecoderParams(par);
//allocate frame buffer byte[] buffer = new byte[(int)camera.PreviewResolution.Width * (int)camera.PreviewResolution.Height];
//Copies the current viewfinder frame into a buffer for further decoding. camera.GetPreviewBufferY(buffer);
//decode frame DW_RECT rect = new DW_RECT(); rect.left = 0; rect.right = 0; //decode whole frame DW_ERRORS res = dec.Decode(buffer, (int)camera.PreviewResolution.Width, (int)camera.PreviewResolution.Height, rect);
//results if (res == DW_ERRORS.DW_OK) { for (uint i = 0; i < dec.barcodes.length; ++i) { MessageBox(dec.barcodes.item(i).Text); } } |
BarcodeDecoder class
Namespace: BarcodeReader
Methods
Decodes one frame. The frame is a byte matrix. Each byte has the value from 0
to 255 and represents one image pixel. 0 means a black pixel, 255 means a white
pixel. Pixels are placed from the left to the right, from top to bottom, row by
row.
The matrix is passed to the Decode method as a one-dimensional array. The first upper line of the image is sent first, then comes the second line and so on.
See the picture below for explanation.
Syntax
DW_ERRORS Decode(byte[] img, int width, int height, DW_RECT rect);
Parameters
img |
Array of bytes that contains the frame |
width |
frame width |
height |
frame height |
rect |
scanning zone rectangle, if right and left are null then scan whole frame |
Return Value
Decodes .pgm file.
Syntax
DW_ERRORS Decode(byte[] PGM, DW_RECT rect);
Parameters
PGM |
Contents of PGM file |
width |
frame width |
height |
frame height |
rect |
scanning zone rectangle, if right and left are null then scan whole file |
Return Value
Sets all decoder properties.
Syntax
DW_ERRORS SetDecoderParams(DW_DECODEPARAMS decParams);
Parameters
decParams |
DW_DECODEPARAMS class |
Return Value
Properties
Returns decoded barcodes list.
Property value
Type: BarcodeList
BarcodeList class
Namespace: BarcodeReader
Methods
Returns Barcode object.
Syntax
Barcode item(uint32 index);
Parameters
index |
Number of the barcode you want to get. |
Return Value
Barcode object.
Properties
Returns the quantity of barcodes which were
found.
Property value
Type: uint32
Barcode class
Namespace: BarcodeReader
Properties
Returns the quantity of barcodes which were found.
Property value
Type: DW_BARTYPES
Returns human readable data (barcode string).
Property value
Type: string
Returns raw barcode data. Some barcode types
(PDF417, Code128, QRCode, etc.) can contain binary data that is why to get this
barcode you should better use this method instead of Text property.
Property value
Type: byte[]
Returns barcode coordinates.
Property value
Type: DW_POINT[]
Returns barcode decoding reliability (decoding
quality). Possible values 0…100. Decoding quality less than 30 is considered as
bad. This parameter is actual for 2D barcodes (PDF417, DataMatrix, QRCode,
Aztec).
Property value
DW_DECODEPARAMS class
Namespace: BarcodeReader
Properties
BarcodeTypes |
Sets what types of barcodes should be decoded. Each barcode type has specified integer value. The barcodeTypes property can consist of any combination of these values, you should use the OR for that. Example: BarcodeTypes = DW_ST_PDF417|DW_ST_QRCODE; |
InverseType |
Sets what barcodes should be decoded (darks on light or lights on dark). |
Decoder Settings (Linear) |
|
LinearShowSymbologyID |
Sets the value determining whether to add Symbology ID to the barcode text or not. |
LinearFindBarcodes |
Sets how many Linear barcodes should be decoded on the image. An image may contain one or several barcodes. Works only in Professional edition, Standard decodes only one barcode. |
LinearVerifyCheckDigit |
Sets the value determining whether to verify the optional check digit in barcodes where this check digit is optional. |
LinearShowCheckDigit |
Show the check digit or not. |
LinearShowStartStop |
Show the start/stop characters or not. Some barcode types have start/stop characters (for example, Code39). |
LinearCode39EnableExtended |
Decode Code 39 as Code 39 Extended or not. |
LinearUPCE2UPCA |
Convert a UPC-E barcode to UPC-A or not. |
LinearInterl25MinLen |
The minimum length of an Interleaved 2/5 barcode. If the length of a read barcode is less than this value, the barcode is considered unrecognized. |
LinearInterl25MaxLen |
The maximum length of an Interleaved 2/5 barcode. |
LinearIndustr25MinLen |
The minimum length of an Industrial 2/5 barcode. |
LinearIndustr25MaxLen |
The maximum length of an Industrial 2/5 barcode. |
LinearCode11MinLen |
The minimum length of a Code11 barcode. |
LinearCode11MaxLen |
The maximum length of a Code11 barcode. |
LinearCode39MinLen |
The minimum length of a Code39 barcode. |
LinearCode39MaxLen |
The maximum length of a Code39 barcode. |
LinearCode128MinLen |
The minimum length of a Code128 barcode. |
LinearCode128MaxLen |
The maximum length of a Code128 barcode. |
LinearCodabarMinLen |
The minimum length of a Codabar barcode. |
LinearCodabarMaxLen |
The maximum length of a Codabar barcode. |
LinearCode93MinLen |
The minimum length of a Code93 barcode. |
LinearCode93MaxLen |
The maximum length of a Code93 barcode. |
LinearDecSpeed |
Linear barcode reading speed. Possible values: · 0 - Normal · 1 - Fast · 2 - Slow |
LinearVerify |
Verify linear barcode after decoding. Improves reliability linear barcode reading. |
Decoder Settings (PDF417) |
|
PDF417FindBarcodes |
Sets how many PDF417 barcodes should be decoded on the image. |
PDF417DecSpeed |
PDF417 barcode reading speed. |
PDF417SymbologyID |
Show the PDF417 symbology ID. |
Decoder Settings (DataMatrix) |
|
DataMatrixFindBarcodes |
Sets how many DataMatrix barcodes should be decoded on the image. |
DataMatrixDecSpeed |
DataMatrix barcode reading speed |
DataMatrixSymbologyID |
Show the DataMatrix symbology ID. |
DataMatrixInverseType |
what barcodes should be decoded (darks on light or lights on dark). |
DataMatrixSupportECI |
support or not ECI (Extended Channel Interpretation) |
Decoder Settings (QRCode) |
|
QRCodeFindBarcodes |
Sets how many QRCode barcodes should be decoded on the image. |
QRCodeDecSpeed |
QRCode barcode reading speed |
QRCodeSymbologyID |
Show the QRCode symbology ID. |
Decoder Settings (AztecCode) |
|
AztecCodeFindBarcodes |
Sets how many AztecCode barcodes should be decoded on the image. |
AztecCodeDecSpeed |
AztecCode barcode reading speed |
AztecCodeSymbologyID |
Show the AztecCode symbology ID. |
DW_BARTYPES Enumerator
Namespace: BarcodeReader
Specifies barcode type.
Barcode Type |
Value |
Constant |
Code 128 |
0x00000001 |
DW_ST_CODE128 |
Code 39 |
0x00000002 |
DW_ST_CODE39 |
Interleaved 2/5 |
0x00000004 |
DW_ST_INTERL25 |
EAN-13 |
0x00000008 |
DW_ST_EAN13 |
EAN-8 |
0x00000010 |
DW_ST_EAN8 |
Codabar |
0x00000020 |
DW_ST_CODABAR |
Code 11 |
0x00000040 |
DW_ST_CODE11 |
UPC-A |
0x00000080 |
DW_ST_UPCA |
UPC-E |
0x00000100 |
DW_ST_UPCE |
Industrial 2/5 |
0x00000200 |
DW_ST_INDUSTR25 |
Code 93 |
0x00000400 |
DW_ST_CODE93 |
DataBar omnidirectional, DataBar Truncated |
0x00000800 |
DW_ST_DATABAR_OMNI |
DataBar limited |
0x00001000 |
DW_ST_DATABAR_LIM |
DataBar stacked |
0x00002000 |
DW_ST_DATABAR_STACKED |
DataBar Expanded |
0x00004000 |
DW_ST_DATABAR_EXP |
DataBar Expanded stacked |
0x00008000 |
DW_ST_DATABAR_EXP_STACKED |
unrecognized linear |
0x01000000 |
DW_ST_LINEAR_UNDEC |
unrecognized PDF417 |
0x02000000 |
DW_ST_PDF417_UNDEC |
unrecognized DataMatrix |
0x04000000 |
DW_ST_DATAMATRIX_UNDEC |
unrecognized QRCode |
0x08000000 |
DW_ST_QRCODE_UNDEC |
unrecognized AztecCode |
0x00100000 |
DW_ST_AZTECCODE_UNDEC |
DataMatrix |
0x10000000 |
DW_ST_DATAMATRIX |
PDF417 |
0x20000000 |
DW_ST_PDF417 |
QRCode |
0x40000000 |
DW_ST_QRCODE |
AztecCode |
0x80000000 |
DW_ST_AZTECCODE |
DW_ERRORS Enumerator
Namespace: BarcodeReader
Specifies error codes.
DW_OK |
Ok |
DW_ERROR |
Error |
DW_ERR_IN_PARAM |
invalid input parameter |
DW_CANT_ALLOC_MEM |
can't allocate memory |
DW_LIB_NOT_INIT |
library doesn't initialized |
DW_ERR_RES_IDX |
invalid decoding result index |
DW_DECSPEED Enumerator
Namespace: BarcodeReader
Specifies decoding speed.
DWS_NORMAL |
Normal |
DWS_FAST |
Fast |
DWS_SLOW |
Slow |