Directory Contents Search << >>


DaVinci 4: Leonardo: Funktion DIBDetectBarCode

Die Funktion DIBDetectBarCode durchsucht die einheitenunabhängige Bitmap-Grafik hDIB nach Strichcodes.

BOOL WINAPI DIBDetectBarCode(

HDIB

hDIB,

BARDETECTEDPROC

fnProc,

LPARAM

lParam,

LPSTR

szBarCodeList,

UINT

cchBarCodeList,

DWORD

dwBarCodeTypes,

DWORD

dwReserved):

hDIB

HDIB

Handle der Bitmap, die nach darin enthaltenen Strichcodes durchsucht werden soll,

fnProc

BARDETECTPROC

anwendungsdefinierte Callback-Funktion die nach dem durchsuchen jeder Zeile, sowie beim erfolgreichen Erkennen eines Strichcodes aufgerufen werden soll. NULL wenn die Anwendung keine Callback-Funktion benutzt, der Strichcode kann in szBarCodeList zurückgegeben werden,

lParam

LPARAM

anwendungsdefinierter 32-Bit Wert der bei Aufruf von fnProc an die Callback-Funktion weitergereicht wird,

szBarCodeList

LPSTR

Zeiger auf ein Array von Zeichen das bei der Rückkehr die Liste der erkannten Strichcodes enthalten soll. Die Strichcodes sind als Folge von nullterminierten Strings abgelegt, wobei auf den letzten erkannten Strichcode zwei Nullbytes als Endekennzeichen folgen. Der Parameter darf NULL sein, wenn die Anwendung mit Callback-Funktion im Parameter fnProc arbeitet,

cchBarCodeList

UINT

Größe des Arrays von Zeichen auf das szBarCodeList zeigt,

dwBarCodeTypes

DWORD

Angaben zu den zu durchsuchenden Strichcode-Arten:

BARCODE_TYPE_39  sucht nach 3-aus-9 Strichcodes

BARCODE_TYPE_25  sucht nach 2-aus-5 interleaved Strichcodes

BARCODE_TYPE_EAN13  sucht nach EAN 13 Strichcodes

BARCODE_TYPE_EAN8  sucht nach EAN 8 Strichcodes

BARCODE_TYPE_EAN5  sucht nach EAN5 AddOn-Codes zu EAN13 Strichcodes

BARCODE_TYPE_EAN2  sucht nach EAN2 AddOn-Codes zu EAN13 Strichcodes

BARCODE_TYPE_UPCA  sucht nach UPC-A Strichcodes

BARCODE_TYPE_UPCE  sucht nach UPC-E Strichcodes

BARCODE_TYPE_CODE128  sucht nach Code 128 Strichcodes

BARCODE_TYPE_EAN128  sucht nach EAN128 Strichcodes

BARCODE_TYPE_93  sucht nach Code 93 Strichcodes

BARCODE_TYPE_39_EXTENDED  interpretiert Code 39 als extended

BARCODE_TYPE_93_EXTENDED  interpretiert Code 93 als extended

BARCODE_TEST_CHECKDIGIT  übergibt Code 39 und Code 25 Strichcodes nur dann, wenn die Prüsumme dem Standard entspricht.

BARCODE_DIR_HORZ  sucht in horizontaler Richtung

BARCODE_DIR_VERT  sucht in vertikaler Richtung

BARCODE_ONCE  übergibt jeden gefundenen Code nur einmal an den Callback, auch wenn er mehrfach in verschiedenen Zeilen/Spalten der DIB erkannt wurde,

BARCODE_ALL  sucht nach allen bekannten Strichcodearten in allen Richtungen.

Rückgabewert

Der Rückgabewert ist TRUE, wenn mindestens ein Strichcode erkannt wurde, sonst ist er FALSE.

Callback-Funktion

BOOL CALLBACK BARDETECTEDPROC(

UINT

uMsg,

int

iCurrentPos,

LPCSTR

pszBarCode,

DWORD

dwBarCodeType,

LPARAM

lParam,

DWORD

dummy);

uMsg

UINT

gibt den Grund für den Aufruf der Callback-Funktion an.

MSG_BARDETECT_PEEK  eine Zeile oder Spalte wurde abgearbeitet und die Anwendung hat nun Gelegenheit, Benutzereingaben zu verarbeiten oder einen Fortschrittsbalken zu pflegen,

MSG_BARDETECT_FOUND  es wurde ein Strichcode gefunden. Der Parameter pszBarCode zeigt auf den decodierten Code,

iCurrentPos

int

aktuelle Y oder X-Position beim Suchen,

pszBarCode

LPCSTR

Zeiger auf den gefundenen Strichcode,

dwBarCodeType

DWORD

gibt den Typ des erkannten Strichcodes an. Es können mehrere Schalter aus der BARCODE_xxxx Liste kombiniert sein,

lParam

LPARAM

der beim Aufruf von DIBDetectBarCode im Parameter lParam angegebene 32-Bit Wert,

dummy

DWORD

reserviert zur zukünftigen Definition.

Anmerkungen

Die Funktion sucht Strichcodes immer vorwärts und rückwärts, d.h. beim horizontalen Suchen wird zugleich von links nach rechts und von rechts nach links gesucht.

EAN, UPC-A, UPC-E, Code 128 und Code 93-Strichcodes werden nur an die Anwendung übergeben, wenn der genormte Prüfsummenwert stimmt. Bei 3-aus-9 und 2-aus-5 Codes ist eine Prüfsumme nicht zwingend vorgeschrieben, die Anwendung ist daher selbst für ihr Prüfsummenverfahren verantwortlich. Leitcodes und Identcodes der Deutschen Post sind 2 aus 5 Interleaved-Codes mit ungewöhnlichem Prüfsummenverfahren. PZN-Codes (Pharma Zentral Nummern) sind eine Anwendung von 3 aus 9 Codes mit besonderem Prüfsummenverfahren.

Es können mehrere Strichcodes neben- und übereinander in einer Bitmap verarbeitet werden. Es muss ausreichend weißer Platz zwischen den Strichcodes sein.

Wird derselbe Strichcode mehrfach erkannt (das ist meist so), so wird er nur einmal in das Feld szBarCodeList eingetragen. Die Callback-Funktion im Parameter fnProc wird dagegen für jeden Erkennungsvorgang aufgerufen, es sei denn, das Flag BARCODE_ONCE wurde gesetzt.

Die Suche erfolgt von oben nach unten und von links nach rechts. Erkannte Strichcodes werden in dieser Reihenfolge an die Callback-Funktion übergeben und in das Array eingetragen.

Es kann notwendig sein, dass die Anwendung zur gründlichen Suche nach Strichcodes gedrehte Varianten der DIB mit der Funktion DIBRotate erstellt und ebenfalls auf Strichcodes prüft.

Die Suche nach Strichcodes ist ein relativ langsamer Vorgang. Falls die Anwendung die ungefähre Position des Strichcodes im Voraus kennt, kann sie mit der Funktion StretchDIB den interessierenden Teil der DIB herauskopieren, um die Verarbeitung zu beschleunigen. Jeder zu berücksichtigende Strichcode-Typ kostet Rechenzeit, daher sollte die Anwendung soweit möglich nur die BARCODE_TYPE_xxx Werte angeben, die auch benötigt werden.

Die Funktion verwendet zur Unterscheidung zwischen Strichen und weißen Feldern nur den Grünanteil der DIB.

Es muss darauf geachtet werden, dass als Grundlage des Erkennungsvorganges keine gerasterten DIB benutzt wird. Manche Scanner unterstützen eine Halftone Einstellung, auf diese sollte verzichtet werden. Die Übergang von Farbbildern an die Funktion führt nicht zu einer Verringerung der Arbeitsgeschwindigkeit.

Der Code BARCODE_TYPE_39 und BARCODE_TYPE_39_EXTENDED unterscheiden sich nur in der Interpretation der zurückgelieferten Daten. Die richtige Interpretation kann anhand der gescannten Daten nicht erkannt werden. Daher ist BARCODE_TYPE_39_EXTENDED nicht in BT_ALL enthalten. Dasselbe gilt entsprechend für BARCODE_TYPE_93 und BARCODE_TYPE_93_EXTENDED.

Für weitere Informationen zu Strichcodes und für Software zum Erstellen von Strichcodes beachten Sie bitte unser Produkt BarVision.

Falls die DIB-Grafik durch importieren einer JPEG-Date entstand, sollte das Flag IPF_LOWQUALITY beim Importieren nicht verwendet werden.

Anwendungsbeispiele

Die Funktion kann z.B. verwendet werden, um im Faxeingang entsprechend mit Strichcodes markierte Formulare automatisch zu erkennen.

-


Valid HTML 4.01!