KlassenKlassenKlassenKlassen | | | | Operatoren

get_2d_bar_codeT_get_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode (Operator)

Name

get_2d_bar_codeT_get_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode — Bestimmen der Werte der Datenelemente (in ECC 200: „Module“) innerhalb einer Barcode-Region („Data Matrix Symbol“).

Warnung

get_2d_bar_codeget_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode ist veraltet und wird nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt. Neue Applikationen sollten stattdessen die Funktionalität im Kapitel Identifizierung / Datacode verwenden zum Lesen von 2D-Datacode-Symbologien verwenden (siehe create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModel).

Signatur

get_2d_bar_code(BarCodeRegion, Image : : BarCodeDescr, CodeRegDescr, GenParamNames, GenParamValues : BarCodeDimension, BarCodeData)

Herror T_get_2d_bar_code(const Hobject BarCodeRegion, const Hobject Image, const Htuple BarCodeDescr, const Htuple CodeRegDescr, const Htuple GenParamNames, const Htuple GenParamValues, Htuple* BarCodeDimension, Htuple* BarCodeData)

Herror get_2d_bar_code(Hobject BarCodeRegion, Hobject Image, const HTuple& BarCodeDescr, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeDimension, HTuple* BarCodeData)

HTuple HRegion::Get2dBarCode(const HImage& Image, const HTuple& BarCodeDescr, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeData) const

HTuple HBarCode2D::Get2dBarCode(const HRegion& BarCodeRegion, const HImage& Image, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeData) const

void Get2dBarCode(const HObject& BarCodeRegion, const HObject& Image, const HTuple& BarCodeDescr, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeDimension, HTuple* BarCodeData)

HTuple HImage::Get2dBarCode(const HRegion& BarCodeRegion, const HTuple& BarCodeDescr, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeData) const

HTuple HRegion::Get2dBarCode(const HImage& Image, const HTuple& BarCodeDescr, const HTuple& CodeRegDescr, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* BarCodeData) const

void HOperatorSetX.Get2dBarCode(
[in] IHUntypedObjectX* BarCodeRegion, [in] IHUntypedObjectX* Image, [in] VARIANT BarCodeDescr, [in] VARIANT CodeRegDescr, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* BarCodeDimension, [out] VARIANT* BarCodeData)

VARIANT HBarCode2DX.Get2dBarCode(
[in] IHRegionX* BarCodeRegion, [in] IHImageX* Image, [in] VARIANT BarCodeDescr, [in] VARIANT CodeRegDescr, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* BarCodeData)

VARIANT HImageX.Get2dBarCode(
[in] IHRegionX* BarCodeRegion, [in] VARIANT BarCodeDescr, [in] VARIANT CodeRegDescr, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* BarCodeData)

VARIANT HRegionX.Get2dBarCode(
[in] IHImageX* Image, [in] VARIANT BarCodeDescr, [in] VARIANT CodeRegDescr, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* BarCodeData)

static void HOperatorSet.Get2dBarCode(HObject barCodeRegion, HObject image, HTuple barCodeDescr, HTuple codeRegDescr, HTuple genParamNames, HTuple genParamValues, out HTuple barCodeDimension, out HTuple barCodeData)

HTuple HImage.Get2dBarCode(HRegion barCodeRegion, HTuple barCodeDescr, HTuple codeRegDescr, HTuple genParamNames, HTuple genParamValues, out HTuple barCodeData)

HTuple HRegion.Get2dBarCode(HImage image, HTuple barCodeDescr, HTuple codeRegDescr, HTuple genParamNames, HTuple genParamValues, out HTuple barCodeData)

Beschreibung

get_2d_bar_codeget_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode extrahiert aus einem Symbolkandidaten BarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionbarCodeRegion und den dazugehörigen Grauwerten ImageImageImageImageImageimage die einzelnen Datenwerte (Bit gesetzt oder nicht). BarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrbarCodeDescr enthält den mit gen_2d_bar_code_descrgen_2d_bar_code_descrGen2dBarCodeDescrgen_2d_bar_code_descrGen2dBarCodeDescrGen2dBarCodeDescr erzeugten Barcode-Descriptor, CodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrcodeRegDescr den von find_2d_bar_codefind_2d_bar_codeFind2dBarCodefind_2d_bar_codeFind2dBarCodeFind2dBarCode erzeugten Regionen-Descriptor.

Wenn die übergebene Region BarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionbarCodeRegion einen Barcode enthält, werden die Daten zeilenweise in ein Tupel geschrieben und im Parameter BarCodeDataBarCodeDataBarCodeDataBarCodeDataBarCodeDatabarCodeData zurückgeliefert. Dabei stehen positive Werte für eine logische Eins (Bit gesetzt) und negative Werte für eine logische Null (Bit nicht gesetzt). Der Wert Null bedeutet, dass das Modul nicht eindeutig klassifiziert werden konnte.

In BarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionbarCodeDimension wird die Größe des Datenfeldes zurückgegeben. Diese ist nicht mit der Symbolgröße zu verwechseln, zu der zusätzliche Such- und Alignmentmuster mitzählen. Die ersten beiden Werte von BarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionbarCodeDimension enthalten die Breite und die Höhe des Datenfelds, der dritte Wert entspricht dem Index des Symbols.

Falls kein Barcode extrahiert werden konnte, wird dies durch einen Fehlercode im Rückgabewert signalisiert.

Um auch in schwierigen Fällen noch eine Extraktion der Datenwerte zu ermöglichen, kann mit Hilfe der (optionalen) generischen Parameter GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames und GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues gezielt Einfluss auf die Bildverarbeitungsverfahren genommen werden. Welche das im einzelnen sind, hängt von der Druckform des Barcodes ab, die im Barcode-Descriptor BarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrbarCodeDescr abgelegt ist (siehe gen_2d_bar_code_descrgen_2d_bar_code_descrGen2dBarCodeDescrgen_2d_bar_code_descrGen2dBarCodeDescrGen2dBarCodeDescr). Die Breite eines einzelnen Moduls ('module_width'"module_width""module_width""module_width""module_width""module_width") braucht an dieser Stelle nicht mehr spezifiziert zu werden, da sie Bestandteil des von find_2d_bar_codefind_2d_bar_codeFind2dBarCodefind_2d_bar_codeFind2dBarCodeFind2dBarCode gelieferten Regionen-Descriptors CodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrcodeRegDescr ist.

Die Bildverarbeitung gliedert sich grob in die folgenden Schritte: Zuerst wird die übergebene Region BarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionbarCodeRegion mittels Schwellwert-Operator in eine helle und eine dunkle Region unterteilt. Da um einen 2D-Barcode ein „leerer“ Sicherheitsbereich zu liegen hat, kann in diesem Bereich bestimmt werden, ob das Symbol schwarz-auf-weiß oder umgekehrt gedruckt ist. Damit können die „dunklen“ und „hellen“ Regionen den logischen Datenwerten zugeordnet werden. BarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionbarCodeRegion wird dann durch ein Rechteck approximiert. Die Randbereiche des Rechtecks werden auf die in der 2D-Barcode-Spezifikation festgelegten Muster hin untersucht. Daraus ergibt sich automatisch die Größe der Datenmatrix und die Größe und Position der Module, deren Datenwert daraufhin ermittelt wird.

Parameter für die Bestimmung der Datenwerte eines Moduls:

    'module_rad_ratio'   Bereich des Moduls für die Klassifikation der Daten.

                         Dieser Parameter legt den Bereich des Moduls (in Prozent) fest, in dem die
                         Klassifikation der Daten (gesetzt oder nicht gesetzt) erfolgen soll.
                         'module_rad_ratio' = 1.0 bedeutet, dass das Modul in seiner gesamten Größe
                         untersucht werden soll, bei sehr kleinem 'module_rad_ratio' wird dagegen nur
                         ein Punkt in der Mitte getestet.

                         GenParamValues: 0 < 'module_rad_ratio' <= 1
                         default:        Druckmethode 'printed'"printed""printed""printed""printed""printed":             0.3
                                         Druckmethode 'engraved_lightfield'"engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield": 0.3
                                         Druckmethode 'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield":  0.7

    'use_grayvals'       Verfahren zur Bestimmung des Datenwerts (Nur wählbar bei den Druckmethoden
                         'printed'"printed""printed""printed""printed""printed" und 'engraved_lightfield'"engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield"; bei
                         'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield" wird immer anhand der Grauwerte klassifiziert!).

                         Mit dem Parameter 'use_grayvals' wird festgelegt, mit welchem Verfahren der
                         Datenwert eines Moduls ermittelt werden soll. Ist 'use_grayvals' = 'no', wird
                         getestet, ob der mit 'module_rad_ratio'"module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio" festgelegte Bereich innerhalb
                         der Region liegt, die dem Datenwert 1 zugeordnet wurde. Liegt mehr
                         als die Hälfte des Moduls innerhalb dieser Region, wird das Modul als
                         gesetztes Bit interpretiert.
                         Ist 'use_grayvals' = 'yes', werden innerhalb des Testbereichs die Grauwerte
                         untersucht.  Dafür wird zuvor aus dem bekannten Symbolrand ein Klassifikator
                         erzeugt, der anhand des Minimums, des Maximums und des Wertebereichs der
                         Grauwerte den Testbereich als 'gesetzt' oder 'nicht gesetzt' klassifiziert.
                         Einzelne Grauwert-Merkmale werden ausgeschlossen, wenn sie die Testregionen
                         nicht eindeutig trennen können. Ist die Klassifikation nicht eindeutig,
                         entscheidet die Mehrheit. Ist keines der Grauwertmerkmale geeignet, die
                         Testregionen zu trennen, wird automatisch die regionenbasierte Methode
                         verwendet. Zu erkennen ist dies anhand der in BarCodeDataBarCodeDataBarCodeDataBarCodeDataBarCodeDatabarCodeData
                         zurückgelieferten Werte: Bei der regionenbasierten Methode werden Vielfache
                         von 4 zurückgeliefert, ansonsten Werte zwischen -3 und +3.

                         Bei der Druckmethode 'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield" wird immer anhand der
                         Grauwerte klassifiziert. Die Klassifizierbarkeit lässt sich hierbei oft
                         durch eine günstige Wahl von 'module_rad_ratio'"module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio" verbessern.

                         GenParamValues: 'yes', 'no'
                         default:        'yes'

    'use_grayval_min'    Klassifikation anhand des Grauwert-Minimums.

                         GenParamValues: 'yes', 'no'
                         default:        'yes'

    'use_grayval_max'    Klassifikation anhand des Grauwert-Maximums.

                         GenParamValues: 'yes', 'no'
                         default:        'printed'"printed""printed""printed""printed""printed", 'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield": 'yes'
                                         'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield":            'no'

    'use_grayval_range'  Klassifikation anhand des Grauwertbereichs.

                         GenParamValues: 'yes', 'no'
                         default:        'yes'

Bei den Druckmethoden 'printed'"printed""printed""printed""printed""printed" und 'engraved_lightfield'"engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield""engraved_lightfield" können zusätzlich die
folgenden Parameter gesetzt werden:

   'enlarge_region_rad'  Vergrößerung der Symbolregion.

                         GenParamValues:  > 0  (<= 0: keine Vergrößerung erlaubt)
                         default:        2.5

   'thresh_percent'      Histogrammbereich zum Suchen des optimalen Schwellwerts.

                         Der Schwellwert zum Trennen der hellen und dunklen Bereiche der Region wird
                         in den mittleren 'thresh_percent' Prozent des Grauwerthistogramms gesucht.
                         Bei 'thresh_percent' = 0 liegt der Schwellwert genau in der Mitte zwischen
                         dem hellsten und dem dunkelsten Pixel. Bei 'thresh_percent' = 100 wird der
                         gesamte Histogrammbereich durchsucht. Der Schwellwert beeinflusst neben der
                         Größe der Datenregion auch die Position des umschließenden Vierecks des
                         Symbols und somit auch geringfügig die angenommene Lage der Module.

                         GenParamValues: 0...100
                         default:        50

    'thresh_step_width'  Schrittweite zum Suchen des optimalen Schwellwerts.

                         Der mit 'thresh_percent' abgesteckte Bereich wird mit der Schrittweite
                         'thresh_step_width' solange durchsucht, bis eine optimale Trennung zwischen
                         den hellen und dunklen Bereichen (Maximum der Summe aus hellen und dunklen
                         Regionen) gefunden wurde.  Je kleiner 'thresh_step_width' ist, um so genauer
                         kann das Optimum bestimmt werden, um so länger wird aber auch gesucht.

                         GenParamValues: > 0
                         default:        10

    'smooth_cont'        Parameter für die Approximation der Region durch ein Polygon (Rechteck).

                         Der Parameter 'smooth_cont' bestimmt, über wieviele Punkte die Kontur
                         geglättet wird, bevor die Polygonapproximation durchgeführt wird (vgl.
                         Operator segment_contours_xldsegment_contours_xldSegmentContoursXldsegment_contours_xldSegmentContoursXldSegmentContoursXld).

                         GenParamValues: 0,3,5,7,9,...
                         default:        5

    'max_line_dist1',    Abstand der Kontur von der approximierten Linie.
    'max_line_dist2'
                         Die Parameter 'max_line_dist1' und 'max_line_dist2' bestimmen den maximalen
                         Abstand zwischen der Kontur und der approximierten Linie (vgl. Operator
                         segment_contours_xldsegment_contours_xldSegmentContoursXldsegment_contours_xldSegmentContoursXldSegmentContoursXld).

                         GenParamValues: >= 0
                         default:        4

    'min_cont_len'       Minimale Länge der Konturelemente in Pixel.

                         Konturelemente, die kürzer als 'min_cont_len' sind, werden beim Bestimmen
                         des umgebenden Vierecks der Region ignoriert. Bei sehr kleinen Symbolen oder
                         bei geringer Auflösung kann es nötig sein, diesen Wert zu verkleinern.

                         GenParamValues: > 0
                         default:        50

    'border_width_min'   Minimale Breite des Randbereichs.

                         Im Randbereich der übergebenen Region muss das sogenannte Suchmuster liegen,
                         bestehend aus zwei kontinuierlichen Linien mit gesetzten Bits und zwei
                         alternierenden Linien. Ausgehend von 'border_width_min' wird der
                         Suchbereich solange vergrößert, bis ein gültiger Symbolrand gefunden
                         oder 'border_width_max'"border_width_max""border_width_max""border_width_max""border_width_max""border_width_max" erreicht wurde.

                         GenParamValues: > 0
                         default: 2

    'border_width_max'   Maximale Breite des Randbereichs.

                         GenParamValues: > 'border_width_min'"border_width_min""border_width_min""border_width_min""border_width_min""border_width_min"
                         default: 5

    'border_width'       Exakte Breite des Randbereichs.

                         Als Alternative kann im Parameter 'border_width' die exakte Breite des
                         Suchbereichs übergeben werden. Damit werden automatisch
                         'border_width_min'"border_width_min""border_width_min""border_width_min""border_width_min""border_width_min" und 'border_width_max'"border_width_max""border_width_max""border_width_max""border_width_max""border_width_max" gesetzt.

                         GenParamValues: > 0
                         default: -

Bei der Druckmethode 'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield" können die folgenden Parameter gesetzt werden:

    'median_mask_rad'    Maskengröße für initiale Medianfilterung (vgl. Operator median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage).

                         GenParamValues: 3,5,7,...,501
                         default:        'module_width'"module_width""module_width""module_width""module_width""module_width"*0.1 + 0.5

    'gray_erosion_size'  Maskengröße für Grauwerterosion (vgl. Operator gray_erosion_rectgray_erosion_rectGrayErosionRectgray_erosion_rectGrayErosionRectGrayErosionRect).

                         GenParamValues: 3,5,7,...,511
                         default:        'module_width'"module_width""module_width""module_width""module_width""module_width"*0.18 + 3.5

    'measure_sigma'      Parameter für die Extraktion gerader Kantenpaare (vgl. Operator measure_pairsmeasure_pairsMeasurePairsmeasure_pairsMeasurePairsMeasurePairs).

                         GenParamValues: 0.4...100
                         default:        'module_width'"module_width""module_width""module_width""module_width""module_width"  < 20: 0.7
                                         'module_width'"module_width""module_width""module_width""module_width""module_width" >= 20: 1.4

    'measure_thresh'     Parameter für die Extraktion gerader Kantenpaare (vgl. Operator measure_pairsmeasure_pairsMeasurePairsmeasure_pairsMeasurePairsMeasurePairs).

                         GenParamValues: 1...255
                         default:        2.0

Achtung

Der Operator get_2d_bar_codeget_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode signalisiert über den Fehlercode, dass die übergebene Region keinen gültigen Barcode enthält. Da die vom Operator find_2d_bar_codefind_2d_bar_codeFind2dBarCodefind_2d_bar_codeFind2dBarCodeFind2dBarCode extrahierten Regionenkandidaten aber durchaus Regionen ohne Barcode enthalten können, sollte jeder Aufruf von get_2d_bar_codeget_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode in eine eigene Fehlerbehandlung eingeschlossen werden (siehe Beispiel).

Parallelisierung

Parameter

BarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionBarCodeRegionbarCodeRegion (input_object)  region objectHRegionHRegionHRegionHRegionXHobject

Region, die einen 2D-Barcode enthalten könnte.

ImageImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte)

Zugehöriges Bild.

BarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrbarCodeDescr (input_control)  barcode_2d HTupleHTupleHBarCode2D, HTupleHBarCode2DX, VARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Beschreibung der 2D-Barcodeklasse

CodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrCodeRegDescrcodeRegDescr (input_control)  string-array HTupleHTupleHTupleVARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Zusätzliche Parameter, die die Barcoderegion beschreiben und für die Extraktion der Datenwerte verwendet werden können.

GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames (input_control)  attribute.name-array HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Liste von Namen (optionaler) generischer Steuerparameter.

Defaultwert: []

Werteliste: 'border_width'"border_width""border_width""border_width""border_width""border_width", 'border_width_max'"border_width_max""border_width_max""border_width_max""border_width_max""border_width_max", 'border_width_min'"border_width_min""border_width_min""border_width_min""border_width_min""border_width_min", 'enlarge_region_rad'"enlarge_region_rad""enlarge_region_rad""enlarge_region_rad""enlarge_region_rad""enlarge_region_rad", 'gray_erosion_size'"gray_erosion_size""gray_erosion_size""gray_erosion_size""gray_erosion_size""gray_erosion_size", 'max_line_dist1'"max_line_dist1""max_line_dist1""max_line_dist1""max_line_dist1""max_line_dist1", 'max_line_dist2'"max_line_dist2""max_line_dist2""max_line_dist2""max_line_dist2""max_line_dist2", 'measure_sigma'"measure_sigma""measure_sigma""measure_sigma""measure_sigma""measure_sigma", 'measure_thresh'"measure_thresh""measure_thresh""measure_thresh""measure_thresh""measure_thresh", 'median_mask_rad'"median_mask_rad""median_mask_rad""median_mask_rad""median_mask_rad""median_mask_rad", 'min_cont_len'"min_cont_len""min_cont_len""min_cont_len""min_cont_len""min_cont_len", 'module_rad_ratio'"module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio""module_rad_ratio", 'smooth_cont'"smooth_cont""smooth_cont""smooth_cont""smooth_cont""smooth_cont", 'thresh_percent'"thresh_percent""thresh_percent""thresh_percent""thresh_percent""thresh_percent", 'thresh_step_width'"thresh_step_width""thresh_step_width""thresh_step_width""thresh_step_width""thresh_step_width", 'use_grayval_max'"use_grayval_max""use_grayval_max""use_grayval_max""use_grayval_max""use_grayval_max", 'use_grayval_min'"use_grayval_min""use_grayval_min""use_grayval_min""use_grayval_min""use_grayval_min", 'use_grayval_range'"use_grayval_range""use_grayval_range""use_grayval_range""use_grayval_range""use_grayval_range", 'use_grayvals'"use_grayvals""use_grayvals""use_grayvals""use_grayvals""use_grayvals"

GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues (input_control)  attribute.value-array HTupleHTupleHTupleVARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

Liste der Werte der generischen Steuerparameter.

Defaultwert: []

Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 'yes'"yes""yes""yes""yes""yes", 'no'"no""no""no""no""no", -1, 1.5, 2.5, 3.5, 4.5, 5.5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50

BarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionBarCodeDimensionbarCodeDimension (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Tupel mit der Dimension des extrahierten Symbols. Bei ECC 200: Datenfeldbreite, -höhe, Symbol-Index.

BarCodeDataBarCodeDataBarCodeDataBarCodeDataBarCodeDatabarCodeData (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Tupel mit den Datenwerten des extrahierten Symbols. Wert > 0: logische 1, Wert < 0: logische 0, Wert = 0: Modul nicht klassifizierbar.

Beispiel (HDevelop)

dev_error_var (ErrorCode, 1)
gen_2d_bar_code_descr ('Data Matrix ECC 200', ['mode'], ['printed'], \
                       BarCodeDescr)
read_image (Image, 'bar2d.tif')
find_2d_bar_code (Image, CodeRegion, BarCodeDescr, \
                  ['module_width'], [10], CodeRegDescr)
count_obj (CodeRegion, SymbolNum)
for i := 1 to SymbolNum by 1
  select_obj (CodeRegion, ObjectSelected, i)
  dev_set_check ('~give_error')
  get_2d_bar_code (ObjectSelected, Image, BarCodeDescr, CodeRegDescr, \
                   [], [], BarCodeDimension, BarCodeData)
  err := ErrorCode
  dev_set_check ('give_error')
  if (err = 2)
    decode_2d_bar_code (BarCodeDescr, BarCodeDimension, BarCodeData, \
                        SymbolCharacters, CorrSymbolData, DecodedData, \
                        DecodingError, StructuredAppend)
    if (|DecodedData|)
      tuple_chrt (DecodedData, String)
    endif
  endif
endfor

Ergebnis

Der Operator get_2d_bar_codeget_2d_bar_codeGet2dBarCodeget_2d_bar_codeGet2dBarCodeGet2dBarCode signalisiert über den Fehlercode sowohl, dass inkorrekte Parameter übergeben wurden als auch, dass die Extraktion eines Barcodes aus der übergebenen Region aus bestimmten Gründen scheiterte. Konnte z.B. kein umschließendes Viereck um die Region bestimmt werden, wird der Operator mit dem Fehlercode 8808 abgebrochen. Liegt das Viereck z.T. außerhalb des Bildes, wird mit dem Fehlercode 8807 abgebrochen. Wurde innerhalb des Randbereichs kein Suchmuster gefunden, wird der Operator mit dem Fehlercode 8810 abgebrochen. Wird dagegen der durchgezogener Symbolrand an zwei aneinanderstoßenden Seiten ('L') nicht gefunden, wird mit dem Fehlercode 8809 abgebrochen. Kann bei der Druckmethode 'engraved_darkfield'"engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield""engraved_darkfield" keines der Grauwertmerkmale die Testregionen trennen, bricht der Operator mit dem Fehlercode 8811 ab.

Modul

Data Code


KlassenKlassenKlassenKlassen | | | | Operatoren