Created
May 23, 2017 20:23
-
-
Save ycheng517/0459e787df7dc49b56a31651f79d146c to your computer and use it in GitHub Desktop.
leadtools scanner with metrics
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <getopt.h> | |
#include <string.h> | |
#include <time.h> | |
#include <dirent.h> | |
#include <sys/stat.h> | |
#include <sys/types.h> | |
// | |
// LEADTOOLS Includes | |
// | |
#include "l_bitmap.h" | |
#include "ltbar.h" | |
// | |
// Application Options | |
// | |
struct option long_options[] = | |
{ | |
{"file", required_argument, 0, 'f' }, | |
{"write", optional_argument, 0, 'w' } | |
}; | |
static void print_usage() | |
{ | |
printf("Usage: barcode -f filename [-w barcodedata]\nNote: use barcodedata to write EAN-13 barcode\n"); | |
} | |
static void ReadBarcodes(pBITMAPHANDLE bitmap); | |
static void WriteBarcode(const char *filename, const char *data, L_UINT32 barcodeType); | |
int main(int argc, char *argv[]) | |
{ | |
int opt; | |
int optIndex = 0; | |
char *filename = ""; | |
int ret = SUCCESS; | |
int write = 0; | |
char *data = NULL; | |
UNLOCKSUPPORT(); | |
ISEVALEXPIRED(ret); | |
if(ret) | |
{ | |
printf("\nEvaluation expired. Application will exit.\n"); | |
return EXIT_FAILURE; | |
} | |
/* | |
while((opt = getopt_long(argc,argv,"f:w:",long_options,&optIndex))!=-1) | |
{ | |
switch(opt) | |
{ | |
case 'f': | |
filename = optarg; | |
break; | |
case 'w': | |
write = 1; | |
data = optarg; | |
break; | |
} | |
} | |
if(strlen(filename)==0) | |
{ | |
print_usage(); | |
exit(EXIT_FAILURE); | |
} | |
*/ | |
struct dirent *dp; | |
DIR *dfd; | |
char *dir ; | |
dir = argv[1] ; | |
if ( argc == 1 ) | |
{ | |
printf("Usage: %s dirname\n",argv[0]); | |
return 0; | |
} | |
if ((dfd = opendir(dir)) == NULL) | |
{ | |
fprintf(stderr, "Can't open %s\n", dir); | |
return 0; | |
} | |
char filename_qfd[100] ; | |
while ((dp = readdir(dfd)) != NULL) | |
{ | |
struct stat stbuf ; | |
sprintf( filename_qfd , "%s/%s",dir,dp->d_name) ; | |
if( stat(filename_qfd,&stbuf ) == -1 ) | |
{ | |
printf("Unable to stat file: %s\n",filename_qfd) ; | |
continue ; | |
} | |
if ( ( stbuf.st_mode & S_IFMT ) == S_IFDIR ) | |
{ | |
continue; | |
// Skip directories | |
} | |
printf("%s\n", filename_qfd); | |
clock_t start = clock(), diff; | |
if(!write) | |
{ | |
// | |
// Load Barcode Image | |
// | |
BITMAPHANDLE bitmap = { 0 }; | |
memset(&bitmap,0,sizeof(BITMAPHANDLE)); | |
ret = L_LoadFile(filename_qfd,&bitmap,sizeof(BITMAPHANDLE),0,ORDER_BGR, LOADFILE_ALLOCATE | LOADFILE_STORE, NULL,NULL,NULL,NULL); | |
if(ret!=SUCCESS) | |
{ | |
printf("\nError loading %s: %d\n", filename_qfd, ret); | |
exit(EXIT_FAILURE); | |
} | |
ReadBarcodes(&bitmap); | |
L_FreeBitmap(&bitmap); | |
} | |
else | |
{ | |
if(strlen(data)==0) | |
{ | |
print_usage(); | |
exit(EXIT_FAILURE); | |
} | |
WriteBarcode(filename_qfd, data, BARCODE_1D_EAN_13); | |
} | |
diff = clock() - start; | |
int msec = diff * 1000 / CLOCKS_PER_SEC; | |
printf("Time taken %d seconds %d milliseconds\n", msec/1000, msec%1000); | |
} | |
return EXIT_SUCCESS; | |
} | |
static void GetBarTypeStr(L_UINT32 barType, L_TCHAR * barStr) | |
{ | |
switch (barType) | |
{ | |
case BARCODE_1D_EAN_13: sprintf(barStr, TEXT("EAN 13")); break; | |
case BARCODE_1D_EAN_8: sprintf(barStr, TEXT("EAN 8")); break; | |
case BARCODE_1D_UPC_A: sprintf(barStr, TEXT("UPC A")); break; | |
case BARCODE_1D_UPC_E: sprintf(barStr, TEXT("UPC E")); break; | |
case BARCODE_1D_CODE_3_OF_9: sprintf(barStr, TEXT("Code 3 of 9")); break; | |
case BARCODE_1D_CODE_128: sprintf(barStr, TEXT("Code 128")); break; | |
case BARCODE_1D_CODE_I2_OF_5: sprintf(barStr, TEXT("Interleaved 2 of 5")); break; | |
case BARCODE_1D_CODA_BAR: sprintf(barStr, TEXT("CODABAR")); break; | |
case BARCODE_1D_UCCEAN_128: sprintf(barStr, TEXT("UCCEAN 128")); break; | |
case BARCODE_1D_CODE_93: sprintf(barStr, TEXT("Code 93")); break; | |
case BARCODE_1D_EANEXT_5: sprintf(barStr, TEXT("EAN EXT5")); break; | |
case BARCODE_1D_EANEXT_2: sprintf(barStr, TEXT("EAN EXT2")); break; | |
case BARCODE_1D_MSI: sprintf(barStr, TEXT("MSI")); break; | |
case BARCODE_1D_CODE11: sprintf(barStr, TEXT("Code11")); break; | |
case BARCODE_1D_CODE_S25: sprintf(barStr, TEXT("Standard 2 of 5")); break; | |
case BARCODE_1D_RSS14: sprintf(barStr, TEXT("RSS 14")); break; | |
case BARCODE_1D_RSS14_LIMITED: sprintf(barStr, TEXT("RSS 14 Limited")); break; | |
case BARCODE_1D_RSS14_EXPANDED: sprintf(barStr, TEXT("RSS 14 Expanded")); break; | |
case BARCODE_1D_RSS14_STACKED: sprintf(barStr, TEXT("RSS 14 Stacked")); break; | |
case BARCODE_1D_RSS14_EXP_STACKED: sprintf(barStr, TEXT("RSS 14 Expanded Stacked")); break; | |
case BARCODE_1D_PATCH_CODE: sprintf(barStr, TEXT("Patch Code")); break; | |
case BARCODE_1D_POST_NET: sprintf(barStr, TEXT("Postnet")); break; | |
case BARCODE_1D_PLANET: sprintf(barStr, TEXT("Planet")); break; | |
case BARCODE_1D_AUST_POST: sprintf(barStr, TEXT("Aust. Post")); break; | |
case BARCODE_1D_RM4SCC: sprintf(barStr, TEXT("RM4SCC")); break; | |
case BARCODE_1D_USPS4BC: sprintf(barStr, TEXT("USPS-4CB")); break; | |
case BARCODE_PDF417: sprintf(barStr, TEXT("PDF417")); break; | |
case BARCODE_MICRO_PDF417: sprintf(barStr, TEXT("MicroPDF417")); break; | |
case BARCODE_DM_DEF: sprintf(barStr, TEXT("DM Default")); break; | |
case BARCODE_DM_10x10: sprintf(barStr, TEXT("DM 10x10")); break; | |
case BARCODE_DM_12x12: sprintf(barStr, TEXT("DM 12x12")); break; | |
case BARCODE_DM_14x14: sprintf(barStr, TEXT("DM 14x14")); break; | |
case BARCODE_DM_16x16: sprintf(barStr, TEXT("DM 16x16")); break; | |
case BARCODE_DM_18x18: sprintf(barStr, TEXT("DM 18x18")); break; | |
case BARCODE_DM_20x20: sprintf(barStr, TEXT("DM 20x20")); break; | |
case BARCODE_DM_22x22: sprintf(barStr, TEXT("DM 22x22")); break; | |
case BARCODE_DM_24x24: sprintf(barStr, TEXT("DM 24x24")); break; | |
case BARCODE_DM_26x26: sprintf(barStr, TEXT("DM 26x26")); break; | |
case BARCODE_DM_32x32: sprintf(barStr, TEXT("DM 32x32")); break; | |
case BARCODE_DM_36x36: sprintf(barStr, TEXT("DM 36x36")); break; | |
case BARCODE_DM_40x40: sprintf(barStr, TEXT("DM 40x40")); break; | |
case BARCODE_DM_44x44: sprintf(barStr, TEXT("DM 44x44")); break; | |
case BARCODE_DM_48x48: sprintf(barStr, TEXT("DM 48x48")); break; | |
case BARCODE_DM_52x52: sprintf(barStr, TEXT("DM 52x52")); break; | |
case BARCODE_DM_64x64: sprintf(barStr, TEXT("DM 64x64")); break; | |
case BARCODE_DM_72x72: sprintf(barStr, TEXT("DM 72x72")); break; | |
case BARCODE_DM_80x80: sprintf(barStr, TEXT("DM 80x80")); break; | |
case BARCODE_DM_88x88: sprintf(barStr, TEXT("DM 88x88")); break; | |
case BARCODE_DM_96x96: sprintf(barStr, TEXT("DM 96x96")); break; | |
case BARCODE_DM_104x104: sprintf(barStr, TEXT("DM 10x104")); break; | |
case BARCODE_DM_120x120: sprintf(barStr, TEXT("DM 120x120")); break; | |
case BARCODE_DM_132x132: sprintf(barStr, TEXT("DM 132x132")); break; | |
case BARCODE_DM_144x144: sprintf(barStr, TEXT("DM 144x144")); break; | |
case BARCODE_DM_8x18: sprintf(barStr, TEXT("DM 8x18")); break; | |
case BARCODE_DM_8x32: sprintf(barStr, TEXT("DM 8x32")); break; | |
case BARCODE_DM_12x26: sprintf(barStr, TEXT("DM 12x26")); break; | |
case BARCODE_DM_12x36: sprintf(barStr, TEXT("DM 12x36")); break; | |
case BARCODE_DM_16x36: sprintf(barStr, TEXT("DM 16x36")); break; | |
case BARCODE_DM_16x48: sprintf(barStr, TEXT("DM 48x48")); break; | |
case BARCODE_DM_WRITE_RECTANGLE: sprintf(barStr, TEXT("DM Default Rect")); break; | |
case BARCODE_QR_DEF: sprintf(barStr, TEXT("QR DEF")); break; | |
case BARCODE_QR_M2_1: sprintf(barStr, TEXT("QR M2 1")); break; | |
case BARCODE_QR_M2_2: sprintf(barStr, TEXT("QR M2 2")); break; | |
case BARCODE_QR_M2_3: sprintf(barStr, TEXT("QR M2 3")); break; | |
case BARCODE_QR_M2_4: sprintf(barStr, TEXT("QR M2 4")); break; | |
case BARCODE_QR_M2_5: sprintf(barStr, TEXT("QR M2 5")); break; | |
case BARCODE_QR_M2_6: sprintf(barStr, TEXT("QR M2 6")); break; | |
case BARCODE_QR_M2_7: sprintf(barStr, TEXT("QR M2 7")); break; | |
case BARCODE_QR_M2_8: sprintf(barStr, TEXT("QR M2 8")); break; | |
case BARCODE_QR_M2_9: sprintf(barStr, TEXT("QR M2 9")); break; | |
case BARCODE_QR_M2_10: sprintf(barStr, TEXT("QR M2 10")); break; | |
case BARCODE_QR_M2_11: sprintf(barStr, TEXT("QR M2 11")); break; | |
case BARCODE_QR_M2_12: sprintf(barStr, TEXT("QR M2 12")); break; | |
case BARCODE_QR_M2_13: sprintf(barStr, TEXT("QR M2 13")); break; | |
case BARCODE_QR_M2_14: sprintf(barStr, TEXT("QR M2 14")); break; | |
case BARCODE_QR_M2_15: sprintf(barStr, TEXT("QR M2 15")); break; | |
case BARCODE_QR_M2_16: sprintf(barStr, TEXT("QR M2 16")); break; | |
case BARCODE_QR_M2_17: sprintf(barStr, TEXT("QR M2 17")); break; | |
case BARCODE_QR_M2_18: sprintf(barStr, TEXT("QR M2 18")); break; | |
case BARCODE_QR_M2_19: sprintf(barStr, TEXT("QR M2 19")); break; | |
case BARCODE_QR_M2_20: sprintf(barStr, TEXT("QR M2 20")); break; | |
case BARCODE_QR_M2_21: sprintf(barStr, TEXT("QR M2 21")); break; | |
case BARCODE_QR_M2_22: sprintf(barStr, TEXT("QR M2 22")); break; | |
case BARCODE_QR_M2_23: sprintf(barStr, TEXT("QR M2 23")); break; | |
case BARCODE_QR_M2_24: sprintf(barStr, TEXT("QR M2 24")); break; | |
case BARCODE_QR_M2_25: sprintf(barStr, TEXT("QR M2 25")); break; | |
case BARCODE_QR_M2_26: sprintf(barStr, TEXT("QR M2 26")); break; | |
case BARCODE_QR_M2_27: sprintf(barStr, TEXT("QR M2 27")); break; | |
case BARCODE_QR_M2_28: sprintf(barStr, TEXT("QR M2 28")); break; | |
case BARCODE_QR_M2_29: sprintf(barStr, TEXT("QR M2 29")); break; | |
case BARCODE_QR_M2_30: sprintf(barStr, TEXT("QR M2 30")); break; | |
case BARCODE_QR_M2_31: sprintf(barStr, TEXT("QR M2 31")); break; | |
case BARCODE_QR_M2_32: sprintf(barStr, TEXT("QR M2 32")); break; | |
case BARCODE_QR_M2_33: sprintf(barStr, TEXT("QR M2 33")); break; | |
case BARCODE_QR_M2_34: sprintf(barStr, TEXT("QR M2 34")); break; | |
case BARCODE_QR_M2_35: sprintf(barStr, TEXT("QR M2 35")); break; | |
case BARCODE_QR_M2_36: sprintf(barStr, TEXT("QR M2 36")); break; | |
case BARCODE_QR_M2_37: sprintf(barStr, TEXT("QR M2 37")); break; | |
case BARCODE_QR_M2_38: sprintf(barStr, TEXT("QR M2 38")); break; | |
case BARCODE_QR_M2_39: sprintf(barStr, TEXT("QR M2 39")); break; | |
case BARCODE_QR_M2_40: sprintf(barStr, TEXT("QR M2 40")); break; | |
case BARCODE_QR_M1_1: sprintf(barStr, TEXT("QR M1 1")); break; | |
case BARCODE_QR_M1_2: sprintf(barStr, TEXT("QR M1 2")); break; | |
case BARCODE_QR_M1_3: sprintf(barStr, TEXT("QR M1 3")); break; | |
case BARCODE_QR_M1_4: sprintf(barStr, TEXT("QR M1 4")); break; | |
case BARCODE_QR_M1_5: sprintf(barStr, TEXT("QR M1 5")); break; | |
case BARCODE_QR_M1_6: sprintf(barStr, TEXT("QR M1 6")); break; | |
case BARCODE_QR_M1_7: sprintf(barStr, TEXT("QR M1 7")); break; | |
case BARCODE_QR_M1_8: sprintf(barStr, TEXT("QR M1 8")); break; | |
case BARCODE_QR_M1_9: sprintf(barStr, TEXT("QR M1 9")); break; | |
case BARCODE_QR_M1_10: sprintf(barStr, TEXT("QR M1 10")); break; | |
case BARCODE_QR_M1_11: sprintf(barStr, TEXT("QR M1 11")); break; | |
case BARCODE_QR_M1_12: sprintf(barStr, TEXT("QR M1 12")); break; | |
case BARCODE_QR_M1_13: sprintf(barStr, TEXT("QR M1 13")); break; | |
case BARCODE_QR_M1_14: sprintf(barStr, TEXT("QR M1 14")); break; | |
#if defined(LEADTOOLS_V19_OR_LATER) | |
case BARCODE_AZTEC_CODE: sprintf(barStr, TEXT("AZTEC CODE")); break; | |
case BARCODE_AZTEC_CODE_Compact1: sprintf(barStr, TEXT("AZTEC CODE Compact1")); break; | |
case BARCODE_AZTEC_CODE_Compact2: sprintf(barStr, TEXT("AZTEC CODE Compact2")); break; | |
case BARCODE_AZTEC_CODE_Compact3: sprintf(barStr, TEXT("AZTEC CODE Compact3")); break; | |
case BARCODE_AZTEC_CODE_Compact4: sprintf(barStr, TEXT("AZTEC CODE Compact4")); break; | |
case BARCODE_AZTEC_CODE_Full1: sprintf(barStr, TEXT("AZTEC CODE Full1")); break; | |
case BARCODE_AZTEC_CODE_Full2: sprintf(barStr, TEXT("AZTEC CODE Full2")); break; | |
case BARCODE_AZTEC_CODE_Full3: sprintf(barStr, TEXT("AZTEC CODE Full3")); break; | |
case BARCODE_AZTEC_CODE_Full4: sprintf(barStr, TEXT("AZTEC CODE Full4")); break; | |
case BARCODE_AZTEC_CODE_Full5: sprintf(barStr, TEXT("AZTEC CODE Full5")); break; | |
case BARCODE_AZTEC_CODE_Full6: sprintf(barStr, TEXT("AZTEC CODE Full6")); break; | |
case BARCODE_AZTEC_CODE_Full7: sprintf(barStr, TEXT("AZTEC CODE Full7")); break; | |
case BARCODE_AZTEC_CODE_Full8: sprintf(barStr, TEXT("AZTEC CODE Full8")); break; | |
case BARCODE_AZTEC_CODE_Full9: sprintf(barStr, TEXT("AZTEC CODE Full9")); break; | |
case BARCODE_AZTEC_CODE_Full10: sprintf(barStr, TEXT("AZTEC CODE Full10")); break; | |
case BARCODE_AZTEC_CODE_Full11: sprintf(barStr, TEXT("AZTEC CODE Full11")); break; | |
case BARCODE_AZTEC_CODE_Full12: sprintf(barStr, TEXT("AZTEC CODE Full12")); break; | |
case BARCODE_AZTEC_CODE_Full13: sprintf(barStr, TEXT("AZTEC CODE Full13")); break; | |
case BARCODE_AZTEC_CODE_Full14: sprintf(barStr, TEXT("AZTEC CODE Full14")); break; | |
case BARCODE_AZTEC_CODE_Full15: sprintf(barStr, TEXT("AZTEC CODE Full15")); break; | |
case BARCODE_AZTEC_CODE_Full16: sprintf(barStr, TEXT("AZTEC CODE Full16")); break; | |
case BARCODE_AZTEC_CODE_Full17: sprintf(barStr, TEXT("AZTEC CODE Full17")); break; | |
case BARCODE_AZTEC_CODE_Full18: sprintf(barStr, TEXT("AZTEC CODE Full18")); break; | |
case BARCODE_AZTEC_CODE_Full19: sprintf(barStr, TEXT("AZTEC CODE Full19")); break; | |
case BARCODE_AZTEC_CODE_Full20: sprintf(barStr, TEXT("AZTEC CODE Full20")); break; | |
case BARCODE_AZTEC_CODE_Full21: sprintf(barStr, TEXT("AZTEC CODE Full21")); break; | |
case BARCODE_AZTEC_CODE_Full22: sprintf(barStr, TEXT("AZTEC CODE Full22")); break; | |
case BARCODE_AZTEC_CODE_Full23: sprintf(barStr, TEXT("AZTEC CODE Full23")); break; | |
case BARCODE_AZTEC_CODE_Full24: sprintf(barStr, TEXT("AZTEC CODE Full24")); break; | |
case BARCODE_AZTEC_CODE_Full25: sprintf(barStr, TEXT("AZTEC CODE Full25")); break; | |
case BARCODE_AZTEC_CODE_Full26: sprintf(barStr, TEXT("AZTEC CODE Full26")); break; | |
case BARCODE_AZTEC_CODE_Full27: sprintf(barStr, TEXT("AZTEC CODE Full27")); break; | |
case BARCODE_AZTEC_CODE_Full28: sprintf(barStr, TEXT("AZTEC CODE Full28")); break; | |
case BARCODE_AZTEC_CODE_Full29: sprintf(barStr, TEXT("AZTEC CODE Full29")); break; | |
case BARCODE_AZTEC_CODE_Full30: sprintf(barStr, TEXT("AZTEC CODE Full30")); break; | |
case BARCODE_AZTEC_CODE_Full31: sprintf(barStr, TEXT("AZTEC CODE Full31")); break; | |
case BARCODE_AZTEC_CODE_Full32: sprintf(barStr, TEXT("AZTEC CODE Full32")); break; | |
case BARCODE_MAXI_CODE: sprintf(barStr, TEXT("MAXI CODE")); break; | |
case BARCODE_MAXI_CODE_MODE_2: sprintf(barStr, TEXT("MAXI CODE MODE 2")); break; | |
case BARCODE_MAXI_CODE_MODE_3: sprintf(barStr, TEXT("MAXI CODE MODE 3")); break; | |
case BARCODE_MAXI_CODE_MODE_4: sprintf(barStr, TEXT("MAXI CODE MODE 4")); break; | |
case BARCODE_MAXI_CODE_MODE_5: sprintf(barStr, TEXT("MAXI CODE MODE 5")); break; | |
case BARCODE_MICRO_QR_CODE: sprintf(barStr, TEXT("MICRO QR CODE")); break; | |
case BARCODE_MICRO_QR_CODE_M1: sprintf(barStr, TEXT("MICRO QR CODE M1")); break; | |
case BARCODE_MICRO_QR_CODE_M2_L: sprintf(barStr, TEXT("MICRO QR CODE M2 L")); break; | |
case BARCODE_MICRO_QR_CODE_M2_M: sprintf(barStr, TEXT("MICRO QR CODE M2 M")); break; | |
case BARCODE_MICRO_QR_CODE_M3_L: sprintf(barStr, TEXT("MICRO QR CODE M3 L")); break; | |
case BARCODE_MICRO_QR_CODE_M3_M: sprintf(barStr, TEXT("MICRO QR CODE M3 M")); break; | |
case BARCODE_MICRO_QR_CODE_M4_L: sprintf(barStr, TEXT("MICRO QR CODE M4 L")); break; | |
case BARCODE_MICRO_QR_CODE_M4_M: sprintf(barStr, TEXT("MICRO QR CODE M4 M")); break; | |
case BARCODE_MICRO_QR_CODE_M4_Q: sprintf(barStr, TEXT("MICRO QR CODE M4 Q")); break; | |
#endif // #if defined(LEADTOOLS_V19_OR_LATER) | |
case BARCODE_QR_M1_DEF: sprintf(barStr, TEXT("QR M1 DEF")); break; | |
} | |
} | |
static void Read(pBITMAPHANDLE bitmap, L_UINT32 type, char *description) | |
{ | |
int ret = SUCCESS; | |
pBARCODEDATA barcodes = NULL; | |
BARCODE1D barcode_1d_settings = { | |
sizeof(BARCODE1D), | |
0, | |
(BARCODE_DIR_SKEW | BARCODE_DIR_HORIZONTAL | BARCODE_DIR_VERTICAL | BARCODE_DIR_DIAGONAL), | |
0, | |
9, | |
10, | |
15, | |
2, | |
BARCODE_1D_NORMAL, | |
0, | |
10 | |
}; | |
pBARCODE1D barcode_1d_settings_ptr = &barcode_1d_settings; | |
/* | |
barcode_1d_settings->uStructSize = sizeof(pBARCODEDATA); | |
barcode_1d_settings->bOutShowText = 0; // for writing only | |
barcode_1d_settings->nDirection = BARCODE_DIR_SKEW | BARCODE_DIR_HORIZONTAL | BARCODE_DIR_VERTICAL | BARCODE_DIR_DIAGONAL; // for reading only | |
barcode_1d_settings->bErrorCheck = 0; | |
barcode_1d_settings->nGranularity = 9; | |
barcode_1d_settings->nMinLength = 10; | |
barcode_1d_settings->nMaxLength = 15; | |
barcode_1d_settings->nWhiteLines = 2; | |
barcode_1d_settings->uStd1DFlags = BARCODE_1D_NORMAL; | |
barcode_1d_settings->uAdvancedFlags = 0; | |
barcode_1d_settings->nXModule = 10; | |
*/ | |
ret = L_BarCodeRead( | |
bitmap, | |
NULL, | |
type, | |
BARCODE_SCANLINES_PER_PIXELS, | |
0, | |
0, | |
barcode_1d_settings_ptr, | |
NULL, | |
NULL, | |
&barcodes, | |
sizeof(BARCODEDATA)); | |
if(ret == SUCCESS) | |
{ | |
int count = barcodes->nTotalCount; | |
int i = 0; | |
printf("\nTotal %s barcode symbols found is: %d", description, count); | |
for(i=0;i<count;i++) | |
{ | |
char type[40]; | |
GetBarTypeStr(barcodes[i].ulType, type); | |
printf("\nBarcode # %d [%s]\n\tData %s\n\tLeft %d\n\tTop %d\n\tRight %d\n\tBottom %d\n", | |
i+1, type, barcodes[i].pszBarCodeData, | |
barcodes[i].rcBarLocation.left, | |
barcodes[i].rcBarLocation.top, | |
barcodes[i].rcBarLocation.right, | |
barcodes[i].rcBarLocation.bottom); | |
} | |
L_BarCodeFree(&barcodes); | |
} | |
else if(ret == ERROR_BARCODE_NOTFOUND) | |
printf("\nNo %s barcodes found\n", description); | |
else | |
printf("\nError L_BarCodeRead (%d) search for %s barcodes\n", ret, description); | |
} | |
static void ReadBarcodes(pBITMAPHANDLE bitmap) | |
{ | |
int ret; | |
ret = L_BarCodeInit(BARCODES_1D); | |
if(ret!=SUCCESS) | |
{ | |
printf("\nError L_BarCodeInit: %d\n", ret); | |
return; | |
} | |
Read(bitmap, BARCODE_1D_READ_ANYTYPE, "Linear"); | |
L_BarCodeExit(); | |
} | |
static void WriteBarcode(const char *filename, const char *dataString, L_UINT32 barcodeType) | |
{ | |
BITMAPHANDLE barcodeBitmap = { 0 }; | |
int ret; | |
BARCODEDATA data; | |
BARCODE1D bar1d; | |
ret = L_CreateBitmap(&barcodeBitmap, sizeof(BITMAPHANDLE), TYPE_CONV, 2550,3300, 1, ORDER_BGR, NULL, TOP_LEFT, NULL,0); | |
if(ret!=SUCCESS) | |
{ | |
printf("\nError L_CreateBitmap: %d\n", ret); | |
return; | |
} | |
ret = L_BarCodeInit(BARCODES_1D); | |
if(ret!=SUCCESS) | |
{ | |
L_FreeBitmap(&barcodeBitmap); | |
printf("\nError L_BarCodeInit: %d\n", ret); | |
return; | |
} | |
L_FillBitmap(&barcodeBitmap, RGB(255,255,155)); | |
memset(&data,0,sizeof(BARCODEDATA)); | |
memset(&bar1d,0,sizeof(BARCODE1D)); | |
data.uStructSize = sizeof(BARCODEDATA); | |
data.rcBarLocation.left = 281; | |
data.rcBarLocation.top = 413; | |
data.rcBarLocation.right = 1326; | |
data.rcBarLocation.bottom = 1023; | |
data.nUnits = BARCODE_SCANLINES_PER_PIXELS; | |
data.ulType = barcodeType; | |
data.pszBarCodeData = (L_CHAR*)dataString; | |
data.nSizeofBarCodeData = (L_INT)strlen(dataString); | |
bar1d.uStructSize = sizeof(BARCODE1D); | |
bar1d.bErrorCheck = 1; | |
bar1d.bOutShowText = 1; | |
#if defined(LEADTOOLS_V19_OR_LATER) | |
ret = L_BarCodeWrite(&barcodeBitmap, &data, NULL, BARCODE_USECOLORS, &bar1d, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
#else | |
ret = L_BarCodeWrite(&barcodeBitmap, &data, NULL, BARCODE_USECOLORS, &bar1d, NULL, NULL, NULL, NULL); | |
#endif // #if defined(LEADTOOLS_V19_OR_LATER) | |
if(ret==SUCCESS) | |
{ | |
ret = L_SaveBitmap((L_TCHAR*)filename, &barcodeBitmap, FILE_CCITT_GROUP4, 1, 0, NULL); | |
if(ret!=SUCCESS) | |
printf("\nError L_SaveBitmap: %d", ret); | |
} | |
else | |
printf("\nError L_BarCodeWrite: %d", ret); | |
L_FreeBitmap(&barcodeBitmap); | |
L_BarCodeExit(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment