public bool EnableInvertedSymbols { get; set; }
@property (nonatomic, assign) BOOL enableInvertedSymbols;
public boolean getEnableInvertedSymbols()
public void setEnableInvertedSymbols(boolean value)
EnableInvertedSymbols # get and set (DatamatrixBarcodeReadOptions)
true to force the Datamatrix engine to search for both inverted and normal (non-inverted) symbols. Otherwise, false. The default value is false.
The Datamatrix reader engine can automatically read inverted symbols. An inverted symbol is one that has white foreground color and black background for example.
Notice that the colors to search for when reading Datamatrix barcodes can be set using ForeColor and BackColor. When EnableInvertedSymbols is true, the engine will use the two colors specified and then automatically flip them and try again if it cannot find the symbol.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Barcode;
using Leadtools.ImageProcessing;
public void DatamatrixBarcode_Example()
{
string imageFileName = Path.Combine(LEAD_VARS.ImagesDir, "MyDatamatrixBarcodes.tif");
BarcodeEngine engine = new BarcodeEngine();
// Create the image to write the barcodes to
int resolution = 300;
using (RasterImage image = RasterImage.Create((int)(8.5 * resolution), (int)(11.0 * resolution), 1, resolution, RasterColor.FromKnownColor(RasterKnownColor.White)))
{
// Write two Datamatrix barcodes, a square and a rectangle one
WriteBarcode(engine.Writer, image, DatamatrixBarcodeSymbolSize.Size16X36, "Datamatrix1 16x36", false);
WriteBarcode(engine.Writer, image, DatamatrixBarcodeSymbolSize.Size132X132, "Datamatrix2 132x132", true);
// Save the image
using (RasterCodecs codecs = new RasterCodecs())
{
codecs.Save(image, imageFileName, RasterImageFormat.CcittGroup4, 1);
}
}
// Now read the barcodes again
using (RasterCodecs codecs = new RasterCodecs())
{
using (RasterImage image = codecs.Load(imageFileName))
{
// Read only square symbols, should only read the first barcode
ReadBarcodes(engine.Reader, image, true);
// Read all symbols, should read both barcodes
ReadBarcodes(engine.Reader, image, false);
}
}
}
private void WriteBarcode(BarcodeWriter writer, RasterImage image, DatamatrixBarcodeSymbolSize symbolSize, string value, bool topLeft)
{
// Create the barcode data
DatamatrixBarcodeData barcode = BarcodeData.CreateDefaultBarcodeData(BarcodeSymbology.Datamatrix) as DatamatrixBarcodeData;
barcode.SymbolSize = symbolSize;
barcode.Value = value;
barcode.Symbology= BarcodeSymbology.Datamatrix;
// We will use the alignment to position the barcodes, so use all of the image
barcode.Bounds = new LeadRect(0, 0, image.ImageWidth, image.ImageHeight);
// Set the write options
DatamatrixBarcodeWriteOptions options = new DatamatrixBarcodeWriteOptions();
if (topLeft)
{
options.HorizontalAlignment = BarcodeAlignment.Near;
options.VerticalAlignment = BarcodeAlignment.Near;
}
else
{
options.HorizontalAlignment = BarcodeAlignment.Far;
options.VerticalAlignment = BarcodeAlignment.Far;
}
options.DisableCompression = false;
options.GroupNumber = 0;
options.GroupTotal = 0;
options.FileIdNumberLowByte = 1;
options.FileIdNumberHighByte = 1;
options.XModule = 30;
options.HRItoGS1 = false;
// Write it
Console.WriteLine("Writing barcode with symbol size: {0} and Data: {1}", symbolSize, value);
writer.WriteBarcode(image, barcode, options);
}
private void ReadBarcodes(BarcodeReader reader, RasterImage image, bool squareOnly)
{
// Setup read options
DatamatrixBarcodeReadOptions options = new DatamatrixBarcodeReadOptions();
options.ReadSquareSymbolsOnly = squareOnly;
options.EnableDoublePass = false;
options.EnableDoublePassIfSuccess = false;
options.EnableInvertedSymbols = false;
options.EnableFastMode = true;
options.EnableSmallSymbols = true;
options.EnablePreprocessing = true;
options.GS1toHRI = false;
Console.WriteLine("Reading Datamatrix barcodes with ReadSquareSymbolsOnly set to {0}", squareOnly);
BarcodeData[] barcodes = reader.ReadBarcodes(image, LeadRect.Empty, 0, new BarcodeSymbology[] { BarcodeSymbology.Datamatrix }, new BarcodeReadOptions[] { options });
Console.WriteLine("{0} barcodes found:", barcodes.Length);
foreach (DatamatrixBarcodeData barcode in barcodes)
{
Console.WriteLine(" At {0}, symbol size: {1} data: {2} and symbology: {3}", barcode.Bounds, barcode.SymbolSize, barcode.Value, barcode.Symbology);
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}
import java.io.File;
import java.io.IOException;
import org.junit.*;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import static org.junit.Assert.*;
import leadtools.*;
import leadtools.barcode.*;
import leadtools.codecs.*;
public void datamatrixBarcodeExample() {
final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images";
String imageFileName = combine(LEAD_VARS_IMAGES_DIR, "MyDatamatrixBarcodes.tif");
BarcodeEngine engine = new BarcodeEngine();
// Create the image to write the barcodes to
int resolution = 300;
RasterImage image = RasterImage.create(
(int) (8.5 * resolution),
(int) (11.0 * resolution),
1,
resolution,
RasterColor.fromKnownColor(RasterKnownColor.WHITE)
);
// Write two Datamatrix barcodes, a square and a rectangle one
writeBarcode(engine.getWriter(), image, DatamatrixBarcodeSymbolSize.SIZE16X36, "Datamatrix1 16x36", false);
writeBarcode(engine.getWriter(), image, DatamatrixBarcodeSymbolSize.SIZE132X132, "Datamatrix2 132x132", true);
// Save the image
RasterCodecs codecs = new RasterCodecs();
codecs.save(image, imageFileName, RasterImageFormat.CCITT_GROUP4, 1);
// Now read the barcodes again
image = codecs.load(imageFileName);
// Read only square symbols, should only read the first barcode
readBarcodes(engine.getReader(), image, true);
// Read all symbols, should read both barcodes
readBarcodes(engine.getReader(), image, false);
// cleanup
image.dispose();
codecs.dispose();
}
// Create the barcode data
private void writeBarcode(BarcodeWriter writer, RasterImage image, DatamatrixBarcodeSymbolSize symbolSize, String value, boolean topLeft) {
DatamatrixBarcodeData barcode = (DatamatrixBarcodeData) BarcodeData.createDefaultBarcodeData(BarcodeSymbology.DATAMATRIX);
barcode.setSymbolSize(symbolSize);
barcode.setValue(value);
barcode.setSymbology(BarcodeSymbology.DATAMATRIX);
// We will use the alignment to position the barcodes, so use all of the image
barcode.setBounds(new LeadRect(0, 0, image.getImageWidth(), image.getImageHeight()));
// Set the write options
DatamatrixBarcodeWriteOptions options = new DatamatrixBarcodeWriteOptions();
if (topLeft) {
options.setHorizontalAlignment(BarcodeAlignment.NEAR);
options.setVerticalAlignment(BarcodeAlignment.NEAR);
} else {
options.setHorizontalAlignment(BarcodeAlignment.FAR);
options.setVerticalAlignment(BarcodeAlignment.FAR);
}
options.setDisableCompression(false);
options.setGroupNumber(0);
options.setGroupTotal(0);
options.setFileIdNumberLowByte((byte) 1);
options.setFileIdNumberHighByte((byte) 1);
options.setXModule(30);
options.setHRItoGS1(false);
// Write it
System.out.printf("Writing barcode with symbol size: %1s and Data: %2s%n", symbolSize, value);
writer.writeBarcode(image, barcode, options);
}
// Setup read options
private void readBarcodes(BarcodeReader reader, RasterImage image, boolean squareOnly) {
DatamatrixBarcodeReadOptions options = new DatamatrixBarcodeReadOptions();
options.setReadSquareSymbolsOnly(squareOnly);
options.setEnableDoublePass(false);
options.setEnableDoublePassIfSuccess(false);
options.setEnableInvertedSymbols(false);
options.setEnableFastMode(true);
options.setEnableSmallSymbols(true);
options.setEnablePreprocessing(true);
options.setGS1toHRI(false);
System.out.printf("Reading Datamatrix barcodes with ReadSquareSymbolsOnly set to %1s%n", squareOnly);
BarcodeData[] barcodes = reader.readBarcodes(image, LeadRect.getEmpty(), 0,
new BarcodeSymbology[] { BarcodeSymbology.DATAMATRIX }, new BarcodeReadOptions[] { options });
System.out.printf("%s barcodes found:%n", barcodes.length);
for (BarcodeData barcode : barcodes) {
System.out.printf(" At %1s, symbol size: %2s data: %3s and symbology: %4s", barcode.getBounds(),
barcode.getData(), barcode.getValue(), barcode.getSymbology());
}
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.