Skip to content

Instantly share code, notes, and snippets.

@ycheng517
Created May 23, 2017 20:23
Show Gist options
  • Save ycheng517/0459e787df7dc49b56a31651f79d146c to your computer and use it in GitHub Desktop.
Save ycheng517/0459e787df7dc49b56a31651f79d146c to your computer and use it in GitHub Desktop.
leadtools scanner with metrics
#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