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. |