⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmtxwrite.c

📁 Datamatrix二维码库和测试程序,运行于linux,仔细研究可以很容易转化成VC程序,有这就没必要化钱买个控件了,本人libdmtx-0.3版本转化过,的确可行,现在把找到该版本的libdmtx
💻 C
📖 第 1 页 / 共 2 页
字号:
            fprintf(stdout, "libdmtx version %s\n", dmtxVersion());            exit(0);            break;         default:            return DMTX_FAILURE;            break;      }   }   opt->inputPath = (*argvp)[optind];   /* XXX here test for incompatibility between options. For example you      cannot specify dpi if PNM output is requested */   return DMTX_SUCCESS;}/** * * */static voidReadData(UserOptions *opt, int *codeBufferSize, unsigned char *codeBuffer){   int fd;   /* Open file or stdin for reading */   fd = (opt->inputPath == NULL) ? 0 : open(opt->inputPath, O_RDONLY);   if(fd == -1)      FatalError(1, _("Error while opening file \"%s\""), opt->inputPath);   /* Read input contents into buffer */   *codeBufferSize = read(fd, codeBuffer, DMTXWRITE_BUFFER_SIZE);   if(*codeBufferSize == DMTXWRITE_BUFFER_SIZE)      FatalError(1, _("Message to be encoded is too large"));   /* Close file only if not stdin */   if(fd != 0 && close(fd) != 0)      FatalError(1, _("Error while closing file"));}/** * @brief  Display program usage and exit with received status. * @param  status error code returned to OS * @return void */static voidShowUsage(int status){   if(status != 0) {      fprintf(stderr, _("Usage: %s [OPTION]... [FILE]\n"), programName);      fprintf(stderr, _("Try `%s --help' for more information.\n"), programName);   }   else {      fprintf(stdout, _("Usage: %s [OPTION]... [FILE]\n"), programName);      fprintf(stdout, _("\Encode FILE or STDIN and write Data Matrix barcode to desired format\n\\n\Example: %s message.txt -o message.png\n\Example: echo -n 123456 | %s -o message.png\n\\n\OPTIONS:\n"), programName, programName);      fprintf(stdout, _("\  -c, --color=COLOR           barcode color (not implemented)\n\  -b, --bg-color=COLOR        background color (not implemented)\n\  -d, --module=NUM            module size (in pixels)\n\  -m, --margin=NUM            margin size (in pixels)\n\  -e, --encoding=[bfactxe8]   encodation scheme; optimize for:\n\        b = Best optimized    best possible optimization (beta)\n\        f = Fast optimized    basic optimization (not implemented)\n\        a = ASCII  [default]  ASCII standard & extended\n\        c = C40               digits and uppercase\n\        t = Text              digits and lowercase\n\        x = X12               ANSI X12 EDI\n\        e = EDIFACT           ASCII values 32-94\n\        8 = Base 256          all byte values 0-255\n"));      fprintf(stdout, _("\  -f, --format=[pmac]         image output format\n\        p = PNG    [default]  PNG image\n\        m = PNM               PNM image\n\        a = ASCII             ASCII art barcode (preview only)\n\        c = Codewords         Codeword listing  (preview only)\n\  -o, --output=FILE           output filename (default standard output)\n\  -r, --rotate=DEGREES        rotation angle (degrees)\n"));      fprintf(stdout, _("\  -s, --symbol-size=SIZE      symbol size in Rows x Cols\n\        Automatic SIZE options:\n\            s = Auto square   [default]\n\            r = Auto rectangle\n\        Manually specified SIZE options for square symbols:\n\            10x10,   12x12,   14x14,   16x16,   18x18,   20x20,\n\            22x22,   24x24,   26x26,   32x32,   36x36,   40x40,\n\            44x44,   48x48,   52x52,   64x64,   72x72,   80x80,\n\            88x88,   96x96, 104x104, 120x120, 132x132, 144x144\n\        Manually specified SIZE options for rectangular symbols:\n\             8x18,    8x32,   12x26,   12x36,   16x36,   16x48\n"));      fprintf(stdout, _("\  -M, --mosaic                create non-standard Data Mosaic barcode\n\  -R, --resolution=NUM        set image print resolution (dpi)\n\  -v, --verbose               use verbose messages\n\  -V, --version               print version information\n\      --help                  display this help and exit\n"));      fprintf(stdout, _("\nReport bugs to <mike@dragonflylogic.com>.\n"));   }   exit(status);}/** * * */static voidWriteImagePng(UserOptions *opt, DmtxEncode *enc){   FILE *fp;   int row;   int width, height;   png_structp pngPtr;   png_infop infoPtr;   png_bytepp rowPointers;   png_uint_32 pixelsPerMeter;   /* Open file or stdin for writing */   fp = (opt->outputPath == NULL) ? stdout : fopen(opt->outputPath, "wb");   if(fp == NULL) {      perror(programName);      exit(3);   }   /* Create and initialize the png_struct with the desired error handler functions */   pngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);   if(pngPtr == NULL) {      if(fp != stdout)         fclose(fp);      perror(programName);   }   /* Create and initialize image information struct */   infoPtr = png_create_info_struct(pngPtr);   if(infoPtr == NULL) {      if(fp != stdout)         fclose(fp);      png_destroy_write_struct(&pngPtr,  png_infopp_NULL);      perror(programName);   }   /* Set error handling */   if(setjmp(png_jmpbuf(pngPtr))) {      if(fp != stdout)         fclose(fp);      png_destroy_write_struct(&pngPtr, &infoPtr);      perror(programName);   }   width = dmtxImageGetProp(enc->image, DmtxPropWidth);   height = dmtxImageGetProp(enc->image, DmtxPropHeight);   /* Set up output control using standard streams */   png_init_io(pngPtr, fp);   png_set_IHDR(pngPtr, infoPtr, width, height,         8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,         PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);   if(opt->dpi > 0) {      pixelsPerMeter = (png_uint_32)(39.3700787 * opt->dpi + 0.5);      png_set_pHYs(pngPtr, infoPtr, pixelsPerMeter, pixelsPerMeter, PNG_RESOLUTION_METER);   }   rowPointers = (png_bytepp)png_malloc(pngPtr, sizeof(png_bytep) * height);   if(rowPointers == NULL) {      perror(programName);   }   /* This copy reverses row order top-to-bottom so image coordinate system      corresponds with normal "right-handed" 2D space */   for(row = 0; row < height; row++) {      rowPointers[row] = (png_bytep)png_malloc(pngPtr, png_get_rowbytes(pngPtr, infoPtr));      assert(png_get_rowbytes(pngPtr, infoPtr) == width * sizeof(DmtxRgb));      /* Flip rows top-to-bottom to account for PNM "top-left" origin */      memcpy(rowPointers[row], enc->image->pxl + (row * width), width * sizeof(DmtxRgb));   }   png_set_rows(pngPtr, infoPtr, rowPointers);   png_write_png(pngPtr, infoPtr, PNG_TRANSFORM_PACKING, NULL);   /* Clean up after the write, and free any memory allocated */   png_destroy_write_struct(&pngPtr, &infoPtr);   for(row = 0; row < height; row++) {      png_free(pngPtr, rowPointers[row]);   }   png_free(pngPtr, rowPointers);   rowPointers = NULL;   if(fp != stdout)      fclose(fp);}/** * * */static voidWriteImagePnm(UserOptions *opt, DmtxEncode *enc){   int row, col;   int width, height;   FILE *fp;   DmtxRgb rgb;   fp = (opt->outputPath == NULL) ? stdout : fopen(opt->outputPath, "wb");   if(fp == NULL) {      perror(programName);      exit(3);   }   width = dmtxImageGetProp(enc->image, DmtxPropWidth);   height = dmtxImageGetProp(enc->image, DmtxPropHeight);   /* Flip rows top-to-bottom to account for PNM "top-left" origin */   fprintf(fp, "P6 %d %d 255 ", width, height);   for(row = height - 1; row >= 0; row--) {      for(col = 0; col < width; col++) {         dmtxImageGetRgb(enc->image, col, row, rgb);         fwrite(rgb, sizeof(char), 3, fp);      }   }   if(fp != stdout) {      fclose(fp);   }}/** * * */static voidWriteAsciiBarcode(DmtxEncode *enc){   int symbolRow, symbolCol;   int moduleOnAll;   moduleOnAll = DMTX_MODULE_ON_RED | DMTX_MODULE_ON_GREEN | DMTX_MODULE_ON_BLUE;   fputc('\n', stdout);   /* ASCII prints from top to bottom */   for(symbolRow = enc->region.symbolRows - 1; symbolRow >= 0; symbolRow--) {      fputs("    ", stdout);      for(symbolCol = 0; symbolCol < enc->region.symbolCols; symbolCol++) {         fputs((dmtxSymbolModuleStatus(enc->message, enc->region.sizeIdx, symbolRow, symbolCol) &               moduleOnAll) ? "XX" : "  ", stdout);      }      fputs("\n", stdout);   }   fputc('\n', stdout);}/** * * */static voidWriteCodewords(DmtxEncode *enc){   int i, dataWordLength;   dataWordLength = dmtxGetSymbolAttribute(DmtxSymAttribSymbolDataWords, enc->region.sizeIdx);   for(i = 0; i < enc->message->codeSize; i++) {      fprintf(stdout, "%c:%03d\n", (i < dataWordLength) ?            'd' : 'e', enc->message->code[i]);   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -