Home Page Barcode scanning component
Home
J4L Barcode Vision
Introduction
User Guide (1D decoder Java)
User Guide (1D decoder .NET)
User Guide (1D decoder for Delphi)
User Guide (1D decoder REALbasic)
Download
Pricing & Purchase
License
Related products
RBarcode (barcode generation)
User Guide (1D decoder for Delphi)
RBarcode Vision for Delphi

J4L Barcode Vision for Delphi

Copyright J4L (http://www.java4less.com) 2013

Installation

J4L Barcode Vision for Delphi is a component which can read (scan) barcodes images. It support the following features:

  • Finding all barcodes in large images (for example in a scanned page or document)
  • Barcodes can have any orientation (vertical, horizontal, rotated)
  • Supported barcode symbologies are: EAN13, EAN8, CODE128/EAN128, CODE39 (and extended) , INTERLEAVED 25, IDENTCODE, UPCA , UPCE .... (more can be devoloped on demand).
  • Support for PDF417 (sold as a separate product).
  • Support for Datamatrix (sold as a separate product).
  • Support for QRCode (sold as a separate product).
  • Support for Aztec Code (sold as a separate product).

It is available as VCL or Firemonkey components

The requirements are:

  • Any Delphi version starting with Delphi 4. Also working with most recent versions ( Delphi XE 5). 

Know limitations are:

  • Best result are achieved with black barcodes on white background.
  • Shadowed or blurred barcodes can be unreadable.
  • Bars should not touch each other nor the text below the barcode.

 

Demo/Evaluation version

 

The evaluation version contains a executable file (visionDemo.exe) which demonstrates the scanning process. It will scan all BMP and JPG files located in the *images subdirectories.

Run visionDemo.exe and click one of the scan buttons to test the demo version.

 

Installation of the registered version

 

The component is delivered in source code form only. It is made of a set of *.pas files you can compile as component or include in your application.

 

Examples for Vision 1D

 

The use of the component is very simple. You must follow these steps:

  1. Load for example a BMP or JPG image:

    bitMap1 := TBitMap.Create;
    bitMap1.LoadFromFile('myimage.bmp' );


    // for JPEG
    // jpeg := TJPegImage.Create;
    // jpeg.LoadFromFile( 'myfile.jpg');


  2. Create a TJ4LImage object:

    image:=TJ4LImage.create(bitMap1); // or TJ4LImage.create(jpeg);

  3. Create a TJ4LBarcode1DReader instance:

    reader:=TJ4LBarcode1DReader.create();

  4. Set the symbologies you expect to find in the image:

    // we will be looking for code 128 and code 39 barcodes
    reader.setSymbologies(CODE128 + CODE39);

  5. Call the scan() method of the TJ4LBarcode1DReader

    barcodes:=reader.scan(image);

  6. Read the result. The result is a TJ4LBarcodeDataArray object. The elements are TJ4LBarcodeData objects which contain the following information: Symbology (type of barcode), Value ( of the barcode) and position ( x , y).

    if (length(barcodes)>0) then
    for j:=0 to length(barcodes)-1 do
    begin
    WriteLn(Output,'Barcode found '+barcodes[j].toString());
    barcodes[j].free;
    barcodes[j]:=nil;
    end
    else WriteLn(Output,'No barcode found ');

You can optimize the scanning process by setting the following properties in the global RVisionConfiguration object:

  • RVisionConfiguration.maxArea:=90000. Ignore objects larger than 90000 pixels.

  • RVisionConfiguration.minArea:=30. Ignore objects smaller than 30 pixels.

  • RVisionConfiguration.minLength:=15. Ignore bars shorter than 15pixels.

  • RVisionConfiguration.maxLength:=1000. Ignore bars longer than 1000 pixels.

Depending on the size of the object and the image resolution you use, you can modify these values to speed up the scanning process.


Examples for PDF417

The use of the component is:

  1. Load for example a BMP or JPG image:

    bitMap1 := TBitMap.Create;
    bitMap1.LoadFromFile('myimage.bmp' );


    // for JPEG
    // jpeg := TJPegImage.Create;
    // jpeg.LoadFromFile( 'myfile.jpg');


  2. Create a TJ4LImage object:

    image:=TJ4LImage.create(bitMap1); // or TJ4LImage.create(jpeg);

  3. Create a TJ4LBarcode1DReader instance:

    reader:=TJ4LPDF417Reader.create();

  4. Call the read() method of the TJ4LPDF417Reader

    barcodes:=reader.read(image);

  5. Read the result. The result is a TJ4LPDF417DataArray object. The elements are TJ4LPDF417Data objects which contain the following information:

    - method getValue(): to read the scanned value as an array of integers, return a TVectorInteger value which is defined as an array of integer.
    - methods getX() and getY(): position of the barcode in the image.
    - getConfidence(): 0 means no error has been deteced. A value > 0 means errors detected and corrected. A value < -1 means errors were not corrected.
    - getEClevel(): return maximum number of errors that can be corrected.
    - getMacroPDFStringField(f:integer): returns a Macro PDF417 field. The value for the parameter can be: MACROPDF_SEGMENT, MACROPDF_FILEID, MACROPDF_FILENAME, MACROPDF_SEGMENT_COUNT, MACROPDF_TIMESTAMP, MACROPDF_SENDER, MACROPDF_ADRESSEE,
    MACROPDF_FILESIZE or MACROPDF_CHECKSUM . These constants are defined in the J4LPDF417Data unit.

Examples for Datamatrix

The use of the component is:

  1. Load for example a BMP or JPG image:

    bitMap1 := TBitMap.Create;
    bitMap1.LoadFromFile('myimage.bmp' );


    // for JPEG
    // jpeg := TJPegImage.Create;
    // jpeg.LoadFromFile( 'myfile.jpg');


  2. Create a TJ4LImage object:

    image:=TJ4LImage.create(bitMap1); // or TJ4LImage.create(jpeg);

  3. Create a TJ4LDatamatrixReader instance:

    reader:=TJ4LDatamatrixReader.create();

  4. Call the read() method of the TJ4LDatamatrixReader

    barcodes:=reader.read(image);

  5. Read the result. The result is a TJ4LDatamatrixDataArray object. The elements are TJ4LDatamatrixData objects which contain the following information:
    - method getValue(): to read the scanned value as an array of integers, return a TVectorInteger value which is defined as an array of integer.
    - methods getX() and getY(): position of the barcode in the image.

 

 

Examples for QRCode

The use of the component for QRCode is:

  1. Load for example a BMP or JPG image:

    bitMap1 := TBitMap.Create;
    bitMap1.LoadFromFile('myimage.bmp' );


    // for JPEG
    // jpeg := TJPegImage.Create;
    // jpeg.LoadFromFile( 'myfile.jpg');


  2. Create a TJ4LImage object:

    image:=TJ4LImage.create(bitMap1); // or TJ4LImage.create(jpeg);

  3. Create a TJ4LQRCodeReader instance:

    reader:=TJ4L
    QRCodeReader.create();

  4. Call the read() method of the TJ4LQRCodeReader

    barcodes:=reader.read(image);
    reader.isBWImage:=false;
    // convert image to black and white

  5. Read the result. The result is a TJ4LQRCodeDataArray object. The elements are TJ4LQRCodeData objects which contain the following information:
    - method getValue(): to read the scanned value as an array of integers, return a TVectorInteger value which is defined as an array of integer.
    - method getValueAsString() returns the read value as an string.
    - properties x1 and y1: center of the upper left finding pattern of QRCode.
    - properties x2 and y2: center of the upper right finding pattern of QRCode.
    - properties x3 and y3: center of the bottom left finding pattern of QRCode.

 

Examples for Aztec Code

The use of the component for Aztec is:

  1. Load for example a BMP or JPG image:

    bitMap1 := TBitMap.Create;
    bitMap1.LoadFromFile('myimage.bmp' );


    // for JPEG
    // jpeg := TJPegImage.Create;
    // jpeg.LoadFromFile( 'myfile.jpg');


  2. Create a TJ4LImage object:

    image:=TJ4LImage.create(bitMap1); // or TJ4LImage.create(jpeg);

  3. Create a TJ4LAztecCodeReader instance:

    reader:=TJ4L
    AztecCodeReader.create();

  4. Call the read() method of the TJ4LAztecCodeReader

    barcodes:=reader.read(image);
    reader.isBWImage:=false;
    // convert image to black and white

  5. Read the result. The result is a TJ4LAztecDataArray object. The elements are TJ4LAztecData objects which contain the following information:
    - method getValue(): to read the scanned value as an array of integers, return a TVectorInteger value which is defined as an array of integer.
    - method getValueAsString() returns the read value as an string.
    - properties x1 and y1: center of the the Aztec Code barcode.