Code Reading

Diese Gruppe enthält Funktionen zur Detektion und zum Lesen von 1D- und 2D-Codes.

Funktionen

1D Codes

2D Codes

Code-Anforderungen

Grundsätzlich wird eine Modulgröße von mindestens drei Pixeln vorausgesetzt; für stabilere Ergebnisse werden mehr als drei Pixel empfohlen. Das Bild sollte scharf sein und einen hohen Kontrast haben. Zudem wird eine Codeausrichtung von ca. 0° oder 90° empfohlen, sodass der Code parallel zu einer Bildachse liegt.

Interpretation des HRESULT

Für die Code Reading Funktionen werden die HRESULT–Rückgabewerte wie folgt benutzt:

Code

Name

Beschreibung

0x000

S_OK

Funktion wurde erfolgreich ausgeführt und alle erwarteten Codes wurden gefunden (mindestens ein Code bei den Standard-Funktionen und nCodeNumber bei den Experten- Funktionen).

0x001

S_FALSE

Funktion wurde erfolgreich ausgeführt, aber nicht alle erwarteten Codes wurden gefunden (mindestens ein Code bei den Standard-Funktionen und nCodeNumber bei den Experten-Funktionen).

0x256

S_WATCHDOGTIMEOUT

Funktion wurde vom Watchdog abgebrochen. Einige Code Reading Funktionen können Teilergebnisse zurückgeben (siehe dazu einzelne Funktionsbeschreibungen).

0x7xx

Sämtliche Error-Codes

Funktion wurde nicht erfolgreich ausgeführt. Siehe dazu: ADS Return Codes

Daher genügt die übliche Überprüfung mit SUCCEEDED() nicht, um auf einen gefundenen Code und damit auf vorhandene Daten in ipDecodedData zu schließen. Dazu kann folgende Abfrage benutzt werden:

if (hr == S_OK)
{
    // Export Code into String
    hr = ExportSubContainer_String(hr, ipDecodedCode, 0, sCodeAsString, 255);
    // Use sCodeAsString
}
else if (SUCCEEDED(hr))
{
    // Process partial results
}
else
{
    // Error handling
}

Suchstrategien bei 2D-Codes

Für die 2D-Codes werden die Suchalgorithmen auf verschiedene Varianten des Eingangsbildes angewandt, um möglichst viele Codes zu erkennen. Zum Generieren verschiedener Varianten wird Invertieren sowie Spiegeln des Bildes genutzt. Welche Varianten ausprobiert werden, wird als Suchstrategie bezeichnet. Damit Sie mehr Kontrolle über die Laufzeit der Funktionen haben, kann diese Suchstrategie konfiguriert werden. Dafür steht das Enum ETcVn2dCodeSearchStrategy zur Verfügung. Damit kann für jede mögliche Bildtransformation (Invertierung und Spiegelung) jeweils festgelegt werden, ob sie angewandt werden soll und ob das originale Bild oder das transformierte Bild als erstes auf Codes überprüft werden soll.

Der Funktionsparameter eSearchStrategy definiert für entsprechende Code Reading Expertenfunktionen genau diese Suchstrategie. Die folgenden Tabellen zeigen die verschiedenen Kombinationen:

Invertierung

eSearchStrategy

Originalbild

Invertiertes Bild

CSS_ONLY_NOT_INVERTED

1.

-

CSS_FIRST_NOT_INVERTED

1.

2.

CSS_ONLY_INVERTED

-

1.

CSS_FIRST_INVERTED

2.

1.

Spiegelung

eSearchStrategy

Originalbild

Gespiegeltes Bild

CSS_ONLY_NOT_FLIPPED

1.

-

CSS_FIRST_NOT_FLIPPED

1.

2.

CSS_ONLY_FLIPPED

-

1.

CSS_FIRST_FLIPPED

2.

1.

Für jede Transformationsart kann eine Suchstrategie festgelegt werden. Die Suchstrategien der verschiedenen Suchstrategien können wie folgt verknüpft werden:

eSearchStrategy = CSS_ONLY_FLIPPED | CSS_FIRST_INVERTED;

Zudem kann mit der Option CSS_DEFAULT eine Standard-Einstellung ausgewählt werden, die je nach Code-Art variiert.

Code Reading 1:

Verknüpfung von Suchstrategien nicht möglich

Eine Verknüpfung mehrerer Suchstrategien derselben Transformationsart ist nicht zulässig. Es kann jeweils nur eine Strategie für Invertierung und Spiegelung miteinander verknüpft werden.