find_data_code_2dT_find_data_code_2dFindDataCode2dFindDataCode2d (Operator)

Name

find_data_code_2dT_find_data_code_2dFindDataCode2dFindDataCode2d — Suchen und Lesen von 2D-Datacode-Symbolen im Eingabebild sowie Training des 2D-Datacode-Modells.

Signatur

find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamName, GenParamValue : ResultHandles, DecodedDataStrings)

Herror T_find_data_code_2d(const Hobject Image, Hobject* SymbolXLDs, const Htuple DataCodeHandle, const Htuple GenParamName, const Htuple GenParamValue, Htuple* ResultHandles, Htuple* DecodedDataStrings)

void FindDataCode2d(const HObject& Image, HObject* SymbolXLDs, const HTuple& DataCodeHandle, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings)

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HString& GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const char* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const wchar_t* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const   (Nur Windows)

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HString& GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const char* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const wchar_t* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const   (Nur Windows)

static void HOperatorSet.FindDataCode2d(HObject image, out HObject symbolXLDs, HTuple dataCodeHandle, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, string genParamName, int genParamValue, out int resultHandles, out string decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, string genParamName, int genParamValue, out int resultHandles, out string decodedDataStrings)

Beschreibung

Der Operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d sucht im Eingabebild (ImageImageImageImageimage) nach 2D-Datacode-Symbolen und liest den darin kodierten String aus. Dafür muss zuvor mit Hilfe von create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModel oder read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModelReadDataCode2dModel ein Modell für eine Klasse von 2D-Datacodes erstellt und der dabei erzeugte Handle in DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle an find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d übergeben werden. Um in einem Bild gezielt nach mehr als einem Symbol zu suchen, kann in dem generischen Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamName = 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num" die Anzahl der gesuchten Datacodes übergeben werden (GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue).

Als Ergebnis liefert der Operator für jedes erfolgreich detektierte Symbol eine XLD-Kontur mit dem umschließenden Viereck (SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDs), einen Kandidaten-Handle, der auf eine Ergebnisstruktur verweist, in der zusätzliche Informationen über das Symbol und den Such- und Leseprozess abgespeichert wurden (ResultHandlesResultHandlesResultHandlesResultHandlesresultHandles), sowie den String, der in dem Datacode-Symbol kodiert ist (DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings). Ist der String länger als 1024 Zeichen, wird er auf 1020 Zeichen gefolgt von '...' gekürzt. Der Zugriff auf den kompletten String kann in diesem Fall nur mit Hilfe des ResultHandlesResultHandlesResultHandlesResultHandlesresultHandles und dem Operator get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults mit dem Parameter 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data" erfolgen, wobei die einzelnen Zeichen des Strings in einem Tupel zurückgegeben werden.

Das Konzept des 2D-Datacode-Lesers ist bei der Einleitung zu Kapitel Identifizierung / Datacode beschrieben.

Die Symbolstruktur von GS1 DataMatrix, GS1 QR Code und GS1 Aztec Code ist identisch der Struktur von Data Matrix ECC 200, QR Code, bzw. Aztec Code. Deswegen gelten alle typspezifischen Parameter, Einstellungen und Regel, die Data Matrix ECC 200, QR Code oder Aztec betreffen, auch für ihre entsprechende GS1-Variante. Die GS1 Symbologien haben lediglich zusätzliche Vorgaben bezüglich des Formats der im jeweiligen Symbol kodierten Daten. Die Daten müssen in sogenannten "GS1 Application Element Strings" organisiert werden, welche in den allgemeinen GS1 Spezifikationen definiert sind. Wenn zum Beispiel DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle als GS1 DataMatrix erstellt wurde, dann liest find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d ein Symbol nur wenn das Symbol ein gültiges Data Matrix ECC 200 Symbol ist und nur wenn seine Daten nach den GS1 Regeln formatiert sind. Von den "GS1 Application Element Strings" wird nur überprüft, ob die gelesenen Application Identifier im Standard "GS1 General Specifications" existieren. Wenn stattdessen ein Data Matrix ECC 200 Symbol nur allgemeine Daten enthält, wird er vom Operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d nicht gelesen. Dasselbe stimmt auch für GS1 QR Code und GS1 Aztec Code.

Anpassen des Modells

Sollte ein im Bild sichtbarer 2D-Datacode nicht erkannt werden, ist zu überprüfen, ob das Symbol die im Modell beschriebenen Eigenschaften besitzt. Dabei ist insbesondere auf

zu achten. Weitere relevante Größen sind beim Data Matrix ECC 200, beim QR Code und beim Aztec Code der Zwischenraum zwischen benachbarten Vordergrundmodulen ('module_gap'"module_gap""module_gap""module_gap""module_gap") und beim Data Matrix ECC 200 der maximal erlaubte Winkel des Finder-Patterns ('slant_max'"slant_max""slant_max""slant_max""slant_max"). Die aktuellen Einstellungen für diese Werte lassen sich mit dem Operator get_data_code_2d_paramget_data_code_2d_paramGetDataCode2dParamGetDataCode2dParamGetDataCode2dParam abfragen. Gegebenenfalls können die entsprechenden Parameter mit Hilfe des Operators set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam an das 2D-Datacode-Symbol im Bild angepasst werden.

Eine möglichst genaue Anpassung des Modells an die gesuchte Datacode-Klasse empfiehlt sich darüber hinaus auch aus Laufzeitgründen. Im Allgemeinen gilt, dass die Laufzeit von find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d umso höher ist, je allgemeiner das Modell definiert wurde. Zu beachten ist dabei, dass sich das ungünstige Laufzeitverhalten auf Grund eines zu allgemeinen Modells vor allem dann negativ auswirkt, wenn im Bild kein gültiger 2D-Datacode gefunden werden kann.

Trainieren des Modells

Neben dem manuellen Setzen der Modellparameter mit dem Operator set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam ist es auch möglich, das Modell mit Hilfe von find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d anhand eines oder mehrerer Beispielbilder zu trainieren. Dazu muss als generischer Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamName 'train'"train""train""train""train" übergeben werden. Der entsprechende Wert bei GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue bestimmt, welche Parameter aus dem aktuellen Bild gelernt werden sollen. Im einzelnen können die folgenden Werte gesetzt werden:

Es können mehrere zu trainierende Parameter kombiniert und gemeinsam übergeben werden, indem 'train'"train""train""train""train" in einem Tupel mehrfach mit den entsprechenden Werten übergeben wird: z.B. GenParamNameGenParamNameGenParamNameGenParamNamegenParamName = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"] und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue = ['polarity','module_size']["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]. Weiterhin können - im Zusammenhang mit 'train'"train""train""train""train" = 'all'"all""all""all""all" einzelne Parameter explizit vom Training ausgeschlossen werden, indem zusätzlich 'train'"train""train""train""train" mit den entsprechenden Parametern und einem vorangestellten '~'"~""~""~""~" gesetzt wird: z.B. GenParamNameGenParamNameGenParamNameGenParamNamegenParamName = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"] und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue = ['all','~contrast']["all","~contrast"]["all","~contrast"]["all","~contrast"]["all","~contrast"].

Die folgenden Hinweise sollten im Zusammenhang mit dem Training beachtet werden:

Es ist zu beachten, dass möglicherweise gesetzte Zeitschranken im Trainingsmodus nicht beachtet werden (siehe 'timeout'"timeout""timeout""timeout""timeout" in set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam).

Übersicht über die Funktionsweise der Symbolsuche

Abfrage von Ergebnissen der Symbolsuche

Die Operatoren get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults und get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjects erlauben den Zugriff auf zahlreiche Informationen zur Symbolsuche im Allgemeinen wie z.B. die Anzahl der Durchläufe und der untersuchten Kandidaten, und - zusammen mit den ResultHandlesResultHandlesResultHandlesResultHandlesresultHandles - über die Symbolkandidaten im einzelnen, wie die Symbol- und Modulgröße, den Kontrast oder die im Symbol kodierten Rohdaten. Diese Operatoren ermöglichen dabei auch den Zugriff auf all jene Symbolkandidaten, die zwar untersucht aber letztendlich nicht gelesen werden konnten. Insbesondere lässt sich so ermitteln, ob die Vorverarbeitung für ein abgebildetes aber nicht gelesenes 2D-Datacode-Symbol überhaupt einen Kandidaten generiert hat und - anhand einer Statusvariablen - warum dessen Bearbeitung schließlich abgebrochen wurde. Nähere Information finden sich bei den Operatoren get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults und get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjects.

Timeout und Abbruch

Der Operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d kann sowohl mit einem Timeout sowie auch manuell abgebrochen werden. Mit dem Operator set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam kann man einen Timeout festlegen. Falls find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d in einen Timeout läuft, werden alle bis dahin erkannten Codes zurückgegeben. Zusätzlich gibt es die Möglichkeit find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d manuell abzubrechen, indem man set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam mit 'abort' von einem anderen Thread aufruft.

In beiden Fällen, kann mit get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults und dem Parameter 'aborted'"aborted""aborted""aborted""aborted" abgefragt werden, ob der Operator abgebrochen wurde.

Spezielle Parallelisierung für Data Matrix ECC 200

Der Operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d unterstützt eine spezielle Parallelisierung für Data Matrix ECC 200. Diese zusätzliche interne Parallelisierung kann unter gewissen Umständen zu einer signifikant verkürzten Ausführungszeit führen. Im Allgemeinen sind damit schnellere Rechenzeiten zu erwarten, wenn bspw. mit set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam für einen oder mehrere der Parameter 'polarity'"polarity""polarity""polarity""polarity", 'contrast_tolerance'"contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance" und 'finder_pattern_tolerance'"finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance" der Wert 'any'"any""any""any""any" gesetzt wird, oder sich die gesetzten Werte für 'module_gap_min'"module_gap_min""module_gap_min""module_gap_min""module_gap_min" und 'module_gap_max'"module_gap_max""module_gap_max""module_gap_max""module_gap_max" unterscheiden, somit also eine Reihe von Parameterwerten berücksichtigt werden muss. Dies gilt insbesondere, wenn 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" auf 'enhanced_recognition'"enhanced_recognition""enhanced_recognition""enhanced_recognition""enhanced_recognition" oder 'maximum_recognition'"maximum_recognition""maximum_recognition""maximum_recognition""maximum_recognition" gesetzt worden ist.

Bitte beachten Sie, dass der Speicherverbrauch mit der Anzahl der parallel laufenden Threads ansteigt. Um den Speicherverbrauch zu reduzieren, kann mit set_systemset_systemSetSystemSetSystemSetSystem entweder die Anzahl der Threads mit dem Parameter 'thread_num'"thread_num""thread_num""thread_num""thread_num" gesetzt werden, oder der Cache für temporären Speicher mit dem Parameter 'temporary_mem_cache'"temporary_mem_cache""temporary_mem_cache""temporary_mem_cache""temporary_mem_cache" ausgeschaltet werden. Die Data Matrix ECC 200 spezifische Parallelisierung kann auch auf einfache Weise ausgeschaltet werden, indem der generische Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamName = 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization" auf 'disable'"disable""disable""disable""disable" gesetzt wird. Beachten Sie, dass dadurch nur die zusätzliche interne Parallelisierung für Data Matrix ECC 200 ausgeschaltet wird. Bestimmte Teilaufgaben können immer noch parallel abgearbeitet werden. Weitere Informationen zur Deaktivierung der gesamten Parallelisierung finden Sie in der Operatorreferenz von set_systemset_systemSetSystemSetSystemSetSystem mit den Parametern 'thread_num'"thread_num""thread_num""thread_num""thread_num" und 'parallelize_operators'"parallelize_operators""parallelize_operators""parallelize_operators""parallelize_operators". Generell sollte es jedoch nicht notwendig sein, die spezifische Parallelisierung auszuschalten. Standardmäßig ist 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization" auf 'enable'"enable""enable""enable""enable" gesetzt.

Chinesische Zeichen

Enthält ein QR Code chinesische Zeichen, die nach dem chinesischen nationalen Standard GBT 18284-2000 codiert sind, gibt find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d diese Zeichen UTF-8 codiert in DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings zurück, sofern der Systemparameter 'filename_encoding'"filename_encoding""filename_encoding""filename_encoding""filename_encoding" auf 'utf8'"utf8""utf8""utf8""utf8" gesetzt ist. Der Inhalt von 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data", welcher mit get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults abgefragt werden kann, wird nicht nach UTF-8 konvertiert.

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHobject (byte)

Eingabebild. Falls das Bild eine reduzierte Domäne besitzen sollte, so wird der Bereich eingeschränkt in dem nach Datacodes gesucht wird. In der Regel führt dies zu einer Verbesserung der Laufzeit. Allerdings sollte man beachten, dass ein Datacode nicht mehr gefunden werden könnte, wenn er nicht vollständig in der Domäne des Bildes liegt. In seltenen Fällen kann es vorkommen, dass Datacodes außerhalb der Domäne gefunden werden. Sind diese Ergebnisse unerwünscht, müssen sie nachträglich aussortiert werden.

SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDs (output_object)  xld_cont(-array) objectHXLDContHXLDContHobject *

XLD-Konturen, die die erfolgreich dekodierten Datacode-Symbole umschließen. Die Konturen beginnen in der linken oberen Ecke und folgt im Uhrzeigersinn der Standardausrichtung (siehe 'orientation' bei get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults)

DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle (input_control, Zustand wird modifiziert)  datacode_2d HDataCode2D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des zu verwendenden 2D-Datacode-Modells.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Namen von (optionalen) Parametern für die Steuerung des Verhaltens des Operators.

Defaultwert: []

Werteliste: 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization", 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num", 'symbol_search'"symbol_search""symbol_search""symbol_search""symbol_search", 'train'"train""train""train""train"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.value(-array) HTupleHTupleHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*)

Die zu den optionalen generischen Parametern gehörenden Werte.

Defaultwert: []

Wertevorschläge: 'all'"all""all""all""all", 'model_type'"model_type""model_type""model_type""model_type", 'symbol_size'"symbol_size""symbol_size""symbol_size""symbol_size", 'version'"version""version""version""version", 'module_size'"module_size""module_size""module_size""module_size", 'small_modules_robustness'"small_modules_robustness""small_modules_robustness""small_modules_robustness""small_modules_robustness", 'module_shape'"module_shape""module_shape""module_shape""module_shape", 'polarity'"polarity""polarity""polarity""polarity", 'mirrored'"mirrored""mirrored""mirrored""mirrored", 'contrast'"contrast""contrast""contrast""contrast", 'candidate_selection'"candidate_selection""candidate_selection""candidate_selection""candidate_selection", 'module_grid'"module_grid""module_grid""module_grid""module_grid", 'finder_pattern_tolerance'"finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance", 'contrast_tolerance'"contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance", 'additional_levels'"additional_levels""additional_levels""additional_levels""additional_levels", 'image_proc'"image_proc""image_proc""image_proc""image_proc", 'rudimental'"rudimental""rudimental""rudimental""rudimental", 'default'"default""default""default""default", 1, 2, 3, 'enable'"enable""enable""enable""enable", 'disable'"disable""disable""disable""disable"

ResultHandlesResultHandlesResultHandlesResultHandlesresultHandles (output_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Handles der erfolgreich dekodierten 2D-Datacode-Symbole.

DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings (output_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Die dekodierten Datenstrings aller im Bild detektierten 2D-Datacode-Symbole.

Beispiel (HDevelop)

* Examples showing the use of find_data_code_2d.
* First, the operator is used to train the model, afterwards it is used to
* read the symbol in another image.

* Create a model for reading Data matrix ECC 200 codes
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
* Read a training image
read_image (Image, 'datacode/ecc200/ecc200_cpu_007')
* Train the model with the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'train', 'all', \
                   ResultHandles, DecodedDataStrings)
*
* End of training / begin of normal application
*

* Read an image
read_image (Image, 'datacode/ecc200/ecc200_cpu_010')
* Read the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \
                   ResultHandles, DecodedDataStrings)

* Display all symbols, the strings encoded in them, and the module size
dev_set_color ('green')
for i := 0 to |ResultHandles| - 1 by 1
    select_obj (SymbolXLDs, SymbolXLD, i+1)
    dev_display (SymbolXLD)
    get_contour_xld (SymbolXLD, Row, Col)
    set_tposition (WindowHandle, max(Row), min(Col))
    write_string (WindowHandle, DecodedDataStrings[i])
    get_data_code_2d_results (DataCodeHandle, ResultHandles[i], \
                              ['module_height','module_width'], ModuleSize)
    new_line (WindowHandle)
    write_string (WindowHandle, 'module size = ' + ModuleSize[0] + 'x' + \
                                 ModuleSize[1])
endfor

* Clear the model
clear_data_code_2d_model (DataCodeHandle)

Ergebnis

find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2d liefert den Wert 2 (H_MSG_TRUE), falls die übergebenen Parameter korrekt sind. Ansonsten wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModel, read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModelReadDataCode2dModel, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam

Nachfolger

get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjects, write_data_code_2d_modelwrite_data_code_2d_modelWriteDataCode2dModelWriteDataCode2dModelWriteDataCode2dModel

Siehe auch

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModel, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParam, get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResults, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjects

Literatur

GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.

Modul

Data Code